Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.51 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <dirent.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include <pwd.h>
  9. #include <grp.h>
  10.  
  11. char * nazwaPliku;
  12. char * katalogStartowy;
  13. char * _plikAdres;
  14.  
  15. int znalazlPlik = 0;
  16. int znalezionePliki = 0;
  17.  
  18. void AnalizujPlik(char * adresPliku){
  19.  
  20.     printf("\nZnaleziono szukany plik!\n");
  21.     printf("Nazwa : %s\n", nazwaPliku);
  22.     printf("Adres : %s\n", adresPliku);
  23.  
  24.     // uzyskuje informacje o przetwarzanym pliku          
  25.  
  26.     struct stat bufor;
  27.     lstat(adresPliku, &bufor);
  28.  
  29.     // sprawdzam, czy przetwarzany plik jest plikiem czy katalogiem
  30.  
  31.     int jestPlikiem = S_ISREG(bufor.st_mode);
  32.     if (jestPlikiem){
  33.  
  34.         printf("Typ : Plik\n");
  35.         printf("Wielkosc pliku : %ld bajtow\n",bufor.st_size);
  36.     }
  37.     else if (S_ISDIR(bufor.st_mode))
  38.         printf("Typ : Katalog\n");
  39.     else if (S_ISLNK(bufor.st_mode))
  40.         printf("Typ : Link\n");
  41.  
  42.     // uprawnienia
  43.  
  44.     printf("Uprawnienia : ");
  45.         printf( (S_ISDIR(bufor.st_mode)) ? "d" : "-");
  46.         printf( (bufor.st_mode & S_IRUSR) ? "r" : "-");
  47.         printf( (bufor.st_mode & S_IWUSR) ? "w" : "-");
  48.         printf( (bufor.st_mode & S_IXUSR) ? "x" : "-");
  49.         printf( (bufor.st_mode & S_IRGRP) ? "r" : "-");
  50.         printf( (bufor.st_mode & S_IWGRP) ? "w" : "-");
  51.         printf( (bufor.st_mode & S_IXGRP) ? "x" : "-");
  52.         printf( (bufor.st_mode & S_IROTH) ? "r" : "-");
  53.         printf( (bufor.st_mode & S_IWOTH) ? "w" : "-");
  54.         printf( (bufor.st_mode & S_IXOTH) ? "x" : "-");
  55.         printf("\n");
  56.  
  57.     // wlasciciel
  58.  
  59.     int uid = bufor.st_uid;
  60.     int gid = bufor.st_gid;
  61.  
  62.     struct passwd * pw = getpwuid(uid);
  63.     struct group * g = getgrgid(gid);
  64.  
  65.     printf("Wlasciciel : %s\n", pw->pw_name);
  66.     printf("Grupa Wlasciciela : %s\n", g->gr_name);
  67.  
  68.     printf("\n");
  69.  
  70. }
  71.  
  72. int PrzeszukajKatalog(char * katalog){  // 0 = nie znaleziono pliku, 1 = znaleziono plik
  73.  
  74.     printf("Przeszukuje katalog: %s\n", katalog);
  75.  
  76.     DIR * d;
  77.     struct dirent * dir;
  78.     d = opendir(katalog);
  79.  
  80.     if (d){
  81.  
  82.         while((dir = readdir(d)) != NULL){
  83.  
  84.             // przetwarzanie kolejnego pliku z katalogu
  85.  
  86.             char * _plik = dir->d_name;
  87.  
  88.             // ignoruje . i ..
  89.    
  90.             if (strcmp(_plik, ".") == 0 || strcmp(_plik, "..") == 0){
  91.  
  92.                 continue;
  93.  
  94.             }
  95.  
  96.             _plikAdres = malloc(strlen(katalog)+strlen(_plik)+1);
  97.             strcpy(_plikAdres, katalog);
  98.             strcat(_plikAdres, "/");
  99.             strcat(_plikAdres, _plik);
  100.  
  101.             // printf("%s (%s)\n", _plik, _plikAdres);
  102.  
  103.             // sprawdzam czy aktualny plik, to ten ktorego szukamy
  104.  
  105.             if (strcmp(_plik, nazwaPliku) == 0){
  106.        
  107.                 // znaleziono plik, ktorego szukalismy!
  108.  
  109.                 znalezionePliki++;
  110.  
  111.                 AnalizujPlik(_plikAdres);
  112.  
  113.             }          
  114.            
  115.             // uzyskuje informacje o przetwarzanym pliku          
  116.  
  117.             struct stat bufor;
  118.             lstat(_plikAdres, &bufor);
  119.  
  120.             // sprawdzam, czy przetwarzany plik jest plikiem czy katalogiem/linkiem
  121.  
  122.             int jestKatalogiem = S_ISDIR(bufor.st_mode) & !S_ISLNK(bufor.st_mode);
  123.  
  124.             // jezeli jest katalogiem, rozpoczynam szukanie w nim
  125.  
  126.             if (jestKatalogiem == 1){
  127.                
  128.                 PrzeszukajKatalog(_plikAdres);
  129.        
  130.             }
  131.            
  132.         }
  133.  
  134.         closedir(d);
  135.  
  136.     }
  137.  
  138.     return 0;
  139.  
  140. }
  141.  
  142. int main(int argc, char ** argv) {
  143.  
  144.     if (argc != 3)
  145.     {
  146.  
  147.         printf("Zla ilosc argumentow\n");
  148.         return 0;
  149.  
  150.     }
  151.  
  152.     nazwaPliku = argv[1];
  153.     katalogStartowy = argv[2];
  154.  
  155.     // podczas testow program mial problemy z dzialaniem, jezeli podany w argumentach katalog nie konczy sie na /
  156.     // wobec tego, sprawdzam czy podany adres konczy sie na /, a jezeli nie, dopisuje do niego /
  157.  
  158.     if (katalogStartowy[strlen(katalogStartowy)-1] != '/'){
  159.  
  160.         char * tempKatalog = malloc(strlen(katalogStartowy) + 1);
  161.         strcpy(tempKatalog, katalogStartowy);
  162.         strcat(tempKatalog, "/");
  163.  
  164.         katalogStartowy = tempKatalog;
  165.  
  166.     }
  167.  
  168.     PrzeszukajKatalog(katalogStartowy);
  169.  
  170.     if (znalezionePliki >= 1)
  171.         printf("\nZakonczono Wyszukiwanie, znaleziono %d plikow.\n", znalezionePliki);
  172.     else
  173.         printf("\nNie znaleziono zadnego pliku o podanej nazwie.\n");
  174.  
  175.     return 0;
  176.  
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement