Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Vytautas Deinis IF-4/6 Ld3 */
- /* Failas: loginas_ld3.c */
- /*
- failo vardo, offseto ir baitų skaičiaus.
- tada kopijavo į kitą failą (jei išeina, pvz jei baitų daugiau nei
- faile yra tada nekopijuoja) ir kopijuot reikėjo primapinus į atmintį.
- tada reikėjo dar atspausdinti nukopijuotus pirmą ir paskutinį baitus
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- int main(int argc, char * Argv[])
- {
- printf( "(C) 2016 Vytautas Deinis, %s\n", __FILE__ );
- if( argc != 4)
- {
- perror("reikia triju argumentu: failo vardo, praleistu nuo pradzios baitu skaiciaus, skaitomu baitu kiekio");
- return 1;
- }
- int failo_vardas = open(Argv[1], O_RDONLY);
- if( failo_vardas == -1 )
- {
- perror("nepavyko atidaryti failo");
- return 1;
- }
- int N = atoi(Argv[2]);
- int M = atoi(Argv[3]);
- void *P = NULL;
- struct stat sb;
- stat(Argv[1], &sb);
- int failo_dydis = sb.st_size;
- if( failo_dydis < (M + N) )
- {
- perror("nepakanka duomenu skaitymo faile");
- return 1;
- }
- int ret = lseek(failo_vardas, N, SEEK_SET);
- if( ret < 0 )
- {
- perror("skaitymas nepavyko del offset");
- return 1;
- }
- unsigned char buffer[M];
- ret = read(failo_vardas, &buffer, M);
- if( ret < 0 )
- {
- perror("skaitymas nepavyko");
- return 1;
- }
- int databin = open("data.bin", O_WRONLY | O_TRUNC | O_CREAT, 0644);
- if( databin < 0)
- {
- perror("nepavyko atidaryti rezultatu failo");
- return 1;
- }
- ret = write(databin, &buffer, M);
- if( ret < 0)
- {
- perror("nepavyko perrasyti duomenu");
- return 1;
- }
- int pirmas, paskutinis = -1;
- pirmas = (int)buffer[0];
- paskutinis = (int)buffer[M-1];
- printf("pirmas nukopijuotas baitas - %d, paskutinis - %d\n", pirmas, paskutinis);
- close(databin);
- close(failo_vardas);
- return 0;
- }
Add Comment
Please, Sign In to add comment