my-ls--初步调试

my-ls--初步调试,第1张

概述1 #include<stdio.h> 2 #include<unistd.h> 3 #include<sys/types.h> 4 #include<sys/stat.h> 5 #include<fcntl.h> 6 #include<pwd.h> 7 #include<grp.h> 8 #include<errno.h> 9 #include<t
  1 #include<stdio.h>  2 #include<unistd.h>  3 #include<sys/types.h>  4 #include<sys/stat.h>  5 #include<fcntl.h>  6 #include<pwd.h>  7 #include<grp.h>  8 #include<errno.h>  9 #include<time.h> 10 #include<dirent.h> 11 #include<glob.h> 12 #include<string.h> 13  14 #define BUFSIZE 100 15 #define BUFFSIZE 1024 16  17 voID statjudge(char *path); 18 voID Listl(char *path); 19 voID Listi(char *path); 20 voID Lista(char *path); 21 voID Listh(char *path); 22  23  24 voID statjudge(char *path) 25 { 26     struct stat mystat; 27  28     if(stat(path,&mystat)==-1) 29     { 30         perror("stat()"); 31         return ; 32     } 33     switch(mystat.st_mode&S_IFMT) 34     { 35         case S_IFSOCK: 36             printf("s"); 37             break; 38         case S_IFLNK: 39             printf("l"); 40             break; 41         case S_IFREG: 42             printf("-"); 43             break; 44         case S_IFBLK: 45             printf("b"); 46             break; 47         case S_IFDIR: 48             printf("d"); 49             break; 50         case S_IFCHR: 51             printf("c"); 52             break; 53         case S_IFIFO: 54             printf("P"); 55             break; 56         fefault: 57             break; 58     } 59  60     if(mystat.st_mode&S_IRUSR) 61         putchar(r); 62     else 63         putchar(-); 64     if(mystat.st_mode&S_IWUSR) 65         putchar(w); 66     else 67         putchar(-); 68     if(mystat.st_mode&S_IXUSR) 69         if(mystat.st_mode&S_ISUID) 70             putchar(s); 71         else 72             putchar(x); 73     else 74         putchar(-); 75     if(mystat.st_mode & S_IRGRP) 76         putchar(r); 77     else 78         putchar(-); 79     if(mystat.st_mode & S_IWGRP) 80         putchar(w); 81     else 82         putchar(-); 83     if(mystat.st_mode & S_IXGRP) 84         if(mystat.st_mode & S_IsgiD) 85             putchar(s); 86         else 87             putchar(x); 88     else 89         putchar(-); 90     if(mystat.st_mode & S_IROTH) 91         putchar(r); 92     else 93         putchar(-); 94     if(mystat.st_mode & S_IWOTH) 95         putchar(w); 96     else 97         putchar(-); 98     if(mystat.st_mode & S_IXOTH) 99         if(mystat.st_mode & S_ISVTX)100             putchar(t);101         else102             putchar(x);103     else104         putchar(-);105 106     printf(" %ld",mystat.st_nlink);107 108     //文件拥有者109     struct passwd *pwd=NulL;110     pwd = getpwuID(mystat.st_uID);111     printf(" %s ",pwd->pw_name);112 113     //文件所属组114     struct group *grp=NulL;115     grp=getgrgID(mystat.st_gID);116     printf(" %s ",grp->gr_name);117 118     //总字节个数119     printf(" %ld ",mystat.st_size);120 121     //获取文件时间 atime mtime ctime122     struct tm *tmp=NulL;123     tmp=localtime(&mystat.st_mtim.tv_sec);124 125     //if error126     char buf[BUFSIZE]={};127     strftime(buf,BUFSIZE,"%m月 %d   %H:%M ",tmp);128     printf("%s ",buf);129 130     //文件名131     char *p=strrchr(path,/);132     printf("%s ",++p);133     putchar(\n);134     return ;135 }136 137 voID Listl(char *path)138 {139     struct stat pstat;140     glob_t pglob;141     char buf[BUFFSIZE]={};142     if(lstat(path,&pstat)<0)143     {144         perror("lstat()");145         return;146     }147     if(!S_ISDIR(pstat.st_mode))148     {149         statjudge(path);150         return;151     }152     strcpy(buf,path);153     strcat(buf,"/*");154     glob(buf,0,NulL,&pglob);155     for(int i=0;i<pglob.gl_pathc;i++)156     {157         statjudge((pglob.gl_pathv)[i]);    158     }159     globfree(&pglob);160 }161 162 voID Listi(char *path)163 {164     struct stat pstat;165     glob_t pglob;166     char buf[BUFFSIZE]={};167     if(lstat(path,&pstat)<0)168     {169         perror("lstat()");170         return;171     }172     if(!S_ISDIR(pstat.st_mode))173     {174         printf("%ld  %s\n",pstat.st_ino,path);175         return;176     }177     strcpy(buf,path);178     strcat(buf,"/*");179     glob(buf,&pglob);180     for(int i=0;i<pglob.gl_pathc;i++)181     {182         if(lstat(((pglob.gl_pathv)[i]),&pstat)<0)183         {184             perror("lstat()");185             return;186         }187         char *o=strrchr((pglob.gl_pathv)[i],/);188         printf("%ld  %s\n",++o);189     }190     globfree(&pglob);191 192 }193 194 voID Lista(char *path)195 {196     struct stat pstat;197     glob_t pglob;198     char buf[BUFFSIZE]={};199     if(lstat(path,&pstat)<0)200     {201         perror("lstat()");202         return;203     }204     if(!S_ISDIR(pstat.st_mode))205     {206         printf("%s  ",path);207         return;208     }209     DIR *dp=opendir(path);210     struct dirent *rd=NulL;211     while(1)212     {213         rd=readdir(dp);214         if(rd==NulL)215         {216             if(errno)217             {218                 perror("readdir()");219                 closedir(dp);220                 return;221             }222             break;223         }224         printf("%s  ",rd->d_name);225     }226     closedir(dp);227     printf("\n");228     return;229 }230 231 voID Listh(char *path)232 {233     struct stat pstat;234     glob_t pglob;235     char buf[BUFFSIZE]={};236     if(lstat(path,&pstat)<0)237     {238         perror("lstat()");239         return;240     }241     if(!S_ISDIR(pstat.st_mode))242     {243         printf("%s  ",path);244         return;245     }246     DIR *dp=opendir(path);247     struct dirent *rd=NulL;248     while(1)249     {250         rd=readdir(dp);251         if(rd==NulL)252         {253             if(errno)254             {255                 perror("readdir()");256                 closedir(dp);257                 return;258             }259             break;260         }261         if((rd->d_name)[0]==.)262             continue;263         printf("%s  ",rd->d_name);264     }265     closedir(dp);266     printf("\n");267 }268 269 int main(int argc,char *argv[])270 {271     char *optstring="-l:i:a:h:";272     int a;273     while(1)274     {275         a=getopt(argc,argv,optstring);    276         if(a==-1)277             break;278         switch(a)279         {280             case l:281                 Listl(optarg);282                 break;283             case i:284                 Listi(optarg);285                 break;286             case a:287                 Lista(optarg);288                 break;289             case h:290                 Listh(optarg);291                 break;292             case ?:293                 printf("不认识此选项%s\n",argv[optind-1]);294                 break;295             case 1:296                 printf("非选项参数%s\n",argv[optind-1]);297                 break;298             default :299                 break;300         }301     }302     return 0;303 }
总结

以上是内存溢出为你收集整理的my-ls--初步调试全部内容,希望文章能够帮你解决my-ls--初步调试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1031331.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存