2. Pliki

2.1. Kopiowanie pliku

Listing 2.2: Kopiowanie pliku (str. 7)

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#define MAX 512

int main(int argc, char* argv[]){
   char buf[MAX];
   int desc_zrod, desc_cel;
   int lbajt;
 
   if (argc<3){
      fprintf(stderr, "Za malo argumentow. Uzyj:\n");
      fprintf(stderr, "%s <plik zrodlowy> <plik docelowy>\n", argv[0]);
      exit(1);
   }

   desc_zrod = open(argv[1], O_RDONLY);
   if (desc_zrod == -1){
      perror("Blad otwarcia pliku zrodlowego");
      exit(1);
   }

   desc_cel = creat(argv[2], 0640);
   if (desc_cel == -1){
      perror("Blad utworzenia pliku docelowego");
      exit(1);
   }

   while((lbajt = read(desc_zrod, buf, MAX)) > 0){
      if (write(desc_cel, buf, lbajt) == -1){
         perror("Blad zapisu pliku docelowego");
         exit(1);
      }
   }
   if (lbajt == -1){
      perror("Blad odczytu pliku zrodlowego");
      exit(1);
   }

   if (close(desc_zrod) == -1 || close(desc_cel) == -1){
      perror("Blad zamkniecia pliku");
      exit(1);
   }

   exit(0);
}

2.2. Ustalanie wielkości (rozmiaru) pliku

Listing 2.3: Wyprowadzanie rozmiaru pliku (str. 8)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char* argv[]){
   int desc;
   long rozm;
 
   if (argc < 2){
      fprintf(stderr, "Za malo argumentow. Uzyj:\n");
      fprintf(stderr, "%s <nazwa pliku>\n", argv[0]);
      exit(1);
   }

   desc = open(argv[1], O_RDONLY);
   if (desc == -1){
      perror("Blad otwarcia pliku");
      exit(1);
   }

   rozm = lseek(desc, 0, SEEK_END);
   if (rozm == -1){
      perror("Blad w pozycjonowaniu");
      exit(1);
   }

   printf("Rozmiar pliku %s: %ld\n", argv[1], rozm);

   if (close(desc) == -1){
      perror("Blad zamkniecia pliku");
      exit(1);
   }

   exit(0);
}

Listing 2.4: Wyprowadzanie rozmiaru wielu plików (str. 9)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char* argv[]){
   int desc, i;
   long rozm;
 
   if (argc < 2){
      fprintf(stderr, "Za malo argumentow. Uzyj:\n");
      fprintf(stderr, "%s <nazwa pliku> ...\n", argv[0]);
      exit(1);
   }

   for (i=1; i<argc; i++) {
      desc = open(argv[i], O_RDONLY);
      if (desc == -1){
         char s[50];
         sprintf(s, "Blad otwarcia pliku %s", argv[i]);
         perror(s);
         continue;
      }

      rozm = lseek(desc, 0, SEEK_END);
      if (rozm == -1){
         perror ("Blad w pozycjonowaniu");
         exit(1);
      }

      printf("Rozmiar pliku %s: %ld\n", argv[i], rozm);

      if (close(desc) == -1){
         perror("Blad zamkniecia pliku");
         exit(1);
      }
   }

   exit(0);
}

2.3. Zadania

  1. Napisz program do tworzenia kopii drugiej połowy pliku.
  2. Napisz program do zastępowania wszystkich cyfr dzisiętnych (od 0 do 9) w kopii pliku znakiem X.
  3. Napisz program do tworzenia kopii pliku z odwróceniem kolejności bajtów/znaków.

Spis treści

Poprzedni temat

1. Wstęp

Następny temat

3. Procesy

Ta strona