Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <stdio.h>
- #include <dirent.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <string.h>
- #include <stdlib.h>
- #include <pwd.h>
- #include <grp.h>
- char * nazwaPliku;
- char * katalogStartowy;
- char * _plikAdres;
- int znalazlPlik = 0;
- int znalezionePliki = 0;
- void AnalizujPlik(char * adresPliku){
- printf("\nZnaleziono szukany plik!\n");
- printf("Nazwa : %s\n", nazwaPliku);
- printf("Adres : %s\n", adresPliku);
- // uzyskuje informacje o przetwarzanym pliku
- struct stat bufor;
- lstat(adresPliku, &bufor);
- // sprawdzam, czy przetwarzany plik jest plikiem czy katalogiem
- int jestPlikiem = S_ISREG(bufor.st_mode);
- if (jestPlikiem){
- printf("Typ : Plik\n");
- printf("Wielkosc pliku : %ld bajtow\n",bufor.st_size);
- }
- else if (S_ISDIR(bufor.st_mode))
- printf("Typ : Katalog\n");
- else if (S_ISLNK(bufor.st_mode))
- printf("Typ : Link\n");
- // uprawnienia
- printf("Uprawnienia : ");
- printf( (S_ISDIR(bufor.st_mode)) ? "d" : "-");
- printf( (bufor.st_mode & S_IRUSR) ? "r" : "-");
- printf( (bufor.st_mode & S_IWUSR) ? "w" : "-");
- printf( (bufor.st_mode & S_IXUSR) ? "x" : "-");
- printf( (bufor.st_mode & S_IRGRP) ? "r" : "-");
- printf( (bufor.st_mode & S_IWGRP) ? "w" : "-");
- printf( (bufor.st_mode & S_IXGRP) ? "x" : "-");
- printf( (bufor.st_mode & S_IROTH) ? "r" : "-");
- printf( (bufor.st_mode & S_IWOTH) ? "w" : "-");
- printf( (bufor.st_mode & S_IXOTH) ? "x" : "-");
- printf("\n");
- // wlasciciel
- int uid = bufor.st_uid;
- int gid = bufor.st_gid;
- struct passwd * pw = getpwuid(uid);
- struct group * g = getgrgid(gid);
- printf("Wlasciciel : %s\n", pw->pw_name);
- printf("Grupa Wlasciciela : %s\n", g->gr_name);
- printf("\n");
- }
- int PrzeszukajKatalog(char * katalog){ // 0 = nie znaleziono pliku, 1 = znaleziono plik
- printf("Przeszukuje katalog: %s\n", katalog);
- DIR * d;
- struct dirent * dir;
- d = opendir(katalog);
- if (d){
- while((dir = readdir(d)) != NULL){
- // przetwarzanie kolejnego pliku z katalogu
- char * _plik = dir->d_name;
- // ignoruje . i ..
- if (strcmp(_plik, ".") == 0 || strcmp(_plik, "..") == 0){
- continue;
- }
- _plikAdres = malloc(strlen(katalog)+strlen(_plik)+1);
- strcpy(_plikAdres, katalog);
- strcat(_plikAdres, "/");
- strcat(_plikAdres, _plik);
- // printf("%s (%s)\n", _plik, _plikAdres);
- // sprawdzam czy aktualny plik, to ten ktorego szukamy
- if (strcmp(_plik, nazwaPliku) == 0){
- // znaleziono plik, ktorego szukalismy!
- znalezionePliki++;
- AnalizujPlik(_plikAdres);
- }
- // uzyskuje informacje o przetwarzanym pliku
- struct stat bufor;
- lstat(_plikAdres, &bufor);
- // sprawdzam, czy przetwarzany plik jest plikiem czy katalogiem/linkiem
- int jestKatalogiem = S_ISDIR(bufor.st_mode) & !S_ISLNK(bufor.st_mode);
- // jezeli jest katalogiem, rozpoczynam szukanie w nim
- if (jestKatalogiem == 1){
- PrzeszukajKatalog(_plikAdres);
- }
- }
- closedir(d);
- }
- return 0;
- }
- int main(int argc, char ** argv) {
- if (argc != 3)
- {
- printf("Zla ilosc argumentow\n");
- return 0;
- }
- nazwaPliku = argv[1];
- katalogStartowy = argv[2];
- // podczas testow program mial problemy z dzialaniem, jezeli podany w argumentach katalog nie konczy sie na /
- // wobec tego, sprawdzam czy podany adres konczy sie na /, a jezeli nie, dopisuje do niego /
- if (katalogStartowy[strlen(katalogStartowy)-1] != '/'){
- char * tempKatalog = malloc(strlen(katalogStartowy) + 1);
- strcpy(tempKatalog, katalogStartowy);
- strcat(tempKatalog, "/");
- katalogStartowy = tempKatalog;
- }
- PrzeszukajKatalog(katalogStartowy);
- if (znalezionePliki >= 1)
- printf("\nZakonczono Wyszukiwanie, znaleziono %d plikow.\n", znalezionePliki);
- else
- printf("\nNie znaleziono zadnego pliku o podanej nazwie.\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement