Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <dirent.h>
- #include <sys/stat.h>
- #include <pwd.h>
- #include <grp.h>
- #include <time.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #define _GNU_SOURCE
- DIR *folder;
- struct dirent *wpis;
- struct stat info;
- int lopt = 0;
- int ropt = 0;
- int aopt = 0;
- int gbopt=0;
- int opt1=0;
- char* sciezka_parametr=".";
- char* prawadostepu(int tryb) {
- char *bufor;
- int i;
- bufor=(char *) malloc (19);
- bufor[1]=((tryb & S_IRUSR) ? 'r' : '-');
- bufor[2]=((tryb & S_IWUSR) ? 'w' : '-');
- bufor[3]=((tryb & S_IXUSR) ? 'x' : '-');
- bufor[4]=((tryb & S_IRGRP) ? 'r' : '-');
- bufor[5]=((tryb & S_IWGRP) ? 'w' : '-');
- bufor[6]=((tryb & S_IXGRP) ? 'x' : '-');
- bufor[7]=((tryb & S_IROTH) ? 'r' : '-');
- bufor[8]=((tryb & S_IWOTH) ? 'w' : '-');
- bufor[9]=((tryb & S_IXOTH) ? 'x' : '-');
- bufor[10] = 0;
- if (S_ISDIR (tryb)) {
- bufor[0] = 'd';
- return bufor;
- }
- if (S_ISBLK (tryb)) {
- bufor[0] = 'b';
- return bufor;
- }
- if (S_ISSOCK (tryb)) {
- bufor[0] = 's';
- return bufor;
- }
- if (S_ISCHR (tryb)) {
- bufor[0] = 'c';
- return bufor;
- }
- if (S_ISFIFO (tryb)) {
- bufor[0] = 'p';
- return bufor;
- }
- if ( S_ISLNK (tryb)) {
- bufor[0] = 'l';
- return bufor;
- }
- bufor[0]='-'; // w przec. wypadku
- return bufor;
- }
- void miesiac(int x)
- {
- char* mies= "sty";
- switch(x)
- {
- case 1:
- mies = "sty";
- break;
- case 2:
- mies = "lut";
- break;
- case 3:
- mies = "mar";
- break;
- case 4:
- mies = "kwi";
- break;
- case 5:
- mies = "maj";
- break;
- case 6:
- mies = "cze";
- break;
- case 7:
- mies = "lip";
- break;
- case 8:
- mies = "sie";
- break;
- case 9:
- mies = "wrz";
- break;
- case 10:
- mies = "paz";
- break;
- case 11:
- mies = "lis";
- break;
- case 12:
- mies = "gru";
- break;
- }
- printf(" %s", mies);
- }
- void piszopcjal(struct dirent *jozef)
- {
- struct tm *czas;
- struct passwd *pw;
- struct group *gr;
- struct stat status;
- lstat(jozef->d_name,&status);
- pw=getpwuid(status.st_uid);
- gr=getgrgid(status.st_gid);
- czas=gmtime(&status.st_mtime);
- printf("%s",prawadostepu(status.st_mode));
- printf(" % 10s ", pw->pw_name);
- if(gbopt==0){
- printf("%10s", gr->gr_name);
- }
- printf("%8d ", (int)status.st_size);
- printf("%02d", czas->tm_mday);
- miesiac((czas->tm_mon)+1);
- printf(" %04d %02d:%02d",((czas->tm_year)+1900), czas->tm_hour+2, czas->tm_min);
- if(S_ISDIR(status.st_mode))
- {
- printf("\e[1;34m %s\n\e[0m", jozef->d_name);
- }
- else if((status.st_mode & S_IXUSR) || (status.st_mode & S_IXGRP) || (status.st_mode & S_IXOTH))
- {
- printf("\e[1;32m %s\n\e[0m", jozef->d_name);
- }
- else
- {
- printf("\e[m %s\n\e[0m", jozef->d_name);
- }
- }
- void piszzwyczajnie(struct dirent *jozef)
- {
- struct stat status;
- lstat(jozef->d_name,&status);
- if(S_ISDIR(status.st_mode))
- {
- printf("\e[1;34m %s\t\e[0m",jozef->d_name);
- }
- else if((status.st_mode & S_IXUSR) || (status.st_mode & S_IXGRP) || (status.st_mode & S_IXOTH))
- {
- printf("\e[1;32m %s\t\e[0m",jozef->d_name);
- }
- else
- {
- printf("\e[0m %s\t\e[0m",jozef->d_name);
- }
- if(opt1 == 1)
- {
- printf("\n");
- }
- }
- void rekur(char *sciezka)
- {
- DIR *dir;
- struct dirent *makaron;
- struct stat stinfo;
- //sciezka=get_current_dir_name();
- if((dir = opendir(sciezka))==NULL)
- {
- printf("\nBlad odczytu katalogu %s\n", sciezka);
- return;
- }
- chdir(sciezka);
- int razem=0;
- while ((makaron=readdir(dir))!=NULL) {
- if(aopt == 0 && makaron->d_name[0]=='.')
- continue;
- if(lopt == 1)
- {
- piszopcjal(makaron);
- }
- else
- {
- piszzwyczajnie(makaron);
- }
- razem++;
- }
- printf("razem: %d\n", razem);
- rewinddir(dir);
- while ((makaron=readdir(dir))!=NULL) {
- if(aopt == 0 && makaron->d_name[0]=='.')
- continue;
- lstat(makaron->d_name,&stinfo);
- char *prawaWyznaczmy = prawadostepu(stinfo.st_mode);
- if (prawaWyznaczmy[0] == 'd')
- {
- if((makaron->d_name == "..") || makaron->d_name == ".")
- {
- continue;
- }
- else if(prawaWyznaczmy[7] != 'r')
- {
- char *sciez2=get_current_dir_name();
- printf("\nbrak dostepu do katalogu %s w folderze %s\n", makaron->d_name, sciez2);
- }
- else
- {
- chdir(makaron->d_name);
- char *sciez2=get_current_dir_name();
- printf("\n%s\n", sciez2);
- rekur(".");
- chdir("..");
- }
- }
- }
- closedir(dir);
- }
- int main(int argc, char **argv){
- int c;
- while( (c=getopt(argc, argv, "aolGR1")) != -1)
- {
- //int this_option_optind = optind ? optind:1;
- switch(c)
- {
- case '1':
- opt1=1;
- break;
- case 'l':
- //printf("option a\n");
- lopt = 1;
- break;
- case 'a':
- aopt =1;
- break;
- case 'R':
- ropt=1;
- break;
- case 'G':
- gbopt=1;
- break;
- case 'o':
- lopt=1;
- gbopt=1;
- break;
- case '?':
- printf("skas zes pan takie opcje wyciagnal?\n");
- break;
- }
- }
- int i;
- for(i = optind; i< argc; i++)
- {
- sciezka_parametr = argv[i];
- printf("%s\n", sciezka_parametr);
- //jezeli cos podano po opcjach juz obejrzanych
- //to pewnie jest to sciezka.
- }
- if((folder = opendir(sciezka_parametr))==NULL)
- {
- printf("Blad odczytu katalogu");
- return 0;
- }
- chdir(sciezka_parametr);
- if( lopt == 1 && ropt == 0)
- {
- while((wpis=readdir(folder))!=NULL)
- {
- if(aopt == 0)
- if(wpis->d_name[0] == '.') continue;
- piszopcjal(wpis);
- }
- }
- else if( lopt == 0 && ropt == 0)
- {
- while((wpis=readdir(folder))!=NULL)
- {
- if(aopt==0 && wpis->d_name[0] == '.')
- continue;
- piszzwyczajnie(wpis);
- }
- }
- else if(ropt == 1)
- {
- chdir(".");
- rekur(".");
- }
- printf("\e[0m");
- printf("\e[m");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement