您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > Unix第一次实验报告(编程实现程序list.c,列表普通磁盘文件等)
Unix编程实验报告班级:CCCCCCCC学号:XXXXXXX姓名:XXX一、实验目的练习vi,使用UNIX的系统调用和库函数,体会UNIX文件通配符的处理方式以及命令对选项的处理方式。二、实验要求编程实现程序list.c,列表普通磁盘文件(不考虑目录和设备文件等),列出文件名和文件大小。a)与ls命令类似,命令行参数可以有0到多个i.0个参数:列出当前目录下所有文件ii.参数为普通文件:列出文件iii.参数为目录:列出目录下所有文件b)实现自定义选项r,a,l,h,m以及--i.r递归方式列出子目录ii.a列出文件名第一个字符为圆点的普通文件(默认情况下不列出文件名首字符为圆点的文件,即只显示隐藏文件)iii.l后跟一整数,限定文件大小的最小值(字节)iv.h后跟一整数,限定文件大小的最大值(字节)v.m后跟一整数n,限定文件的最近修改时间必须在n天内vi.--显式地终止命令选项分析三、程序源码#includestdio.h#includestdlib.h#includedirent.h#includeerrno.h#includesys/stat.h#includestring.h/*将char[]转换为数字*/intsav(charch[],intl[]){inti=0;l[0]=0;while(ch[i]!='\0')if(ch[i]='9'&&ch[i]='0'){l[0]=10*l[0]+ch[i]-'0';i++;}elsereturn0;return1;}main(intargc,char*argv[]){inti,j,k,ret,l=-1,h=-1,m=-1;charpath[30],path1[30];structstatst;DIR*dir;/*定义Dir*/structdirent*entry;/*定义Dirententry*/intorder[7];/*各个数字代表含义order[1]-r;[2]-a;[3]-l;[4]-h;[5]-m;[6]---*/time_ttp;/*当前时间*//*得到当前path*/for(i=1;iargc;i++);i--;if(argv[i][0]=='/'&&argc!=1){for(j=0;argv[i][j]!='\0';j++)path[j]=argv[i][j];path[j]='\0';}else{path[0]='.';path[1]='\0';}/*GetOrder*/for(i=1;i=6;i++)order[i]=0;for(i=1;iargc;i++){if(argv[i][0]=='-'){if(argv[i][1]=='r')order[1]=1;elseif(argv[i][1]=='a')order[2]=1;elseif(argv[i][1]=='l'){order[3]=1;i++;if(iargc)if(sav(argv[i],&l)==0){printf(Wrongorder!\n);return;}}elseif(argv[i][1]=='h'){order[4]=1;i++;if(iargc)if(sav(argv[i],&h)==0){printf(Wrongorder!\n);return;}}elseif(argv[i][1]=='m'){order[5]=1;i++;if(iargc)if(sav(argv[i],&m)==0){printf(Wrongorder!\n);return;}}elseif(argv[i][1]=='-'){order[6]=1;i=argc+1;}else{printf(Wrongorder!\n);return;}}}/*检查order*/if(order[3]==1&&l==-1){printf(Wrongorder!\n);return;}if(order[4]==1&&h==-1){printf(Wrongorder!\n);return;}if(order[5]==1&&m==-1){printf(Wrongorder!\n);return;}time(&tp);/*获取当前时间*/ret=stat(path,&st);/*获取信息*//*处理order的信息*/if(ret==0)/*成功读取path信息*/{if(S_ISDIR(st.st_mode))/*如果是dir*/{dir=opendir(path);if(dir==NULL)/*Unreadable*/{printf(Opendirectory\%s\:%s(ERROR%d)\n,path,strerror(errno),errno);return1;}while((entry=readdir(dir))!=NULL)/*一直读,直至文件结束*/{strcpy(path1,path);strcat(path1,/);strcat(path1,entry-d_name);stat(path1,&st);if(order[1]==0)/*不是-r*/{if(order[2]==1)/*-a*/{if(order[3]==1&&order[4]==1)/*-l和-h*/{if((st.st_size=h)&&(st.st_size=l))if(order[5]==1){/*-m*/if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}else/*no-m*/printf(%s\n,entry-d_name);}elseif(order[3]==1&&order[4]==0){if(st.st_size=l)if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}elseif(order[3]==0&&order[4]==1){if(st.st_size=m)if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}elseif(order[3]==0&&order[4]==0){if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}}else{if(order[3]==1&&order[4]==1){if((st.st_size=h)&&(st.st_size=l)&&entry-d_name[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}elseif(order[3]==1&&order[4]==0){if(st.st_size=l&&entry-d_name[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}elseif(order[3]==0&&order[4]==1){if(st.st_size=m&&entry-d_name[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}elseif(order[3]==0&&order[4]==0){if(entry-d_name[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,entry-d_name);}elseprintf(%s\n,entry-d_name);}}}/*order[1]=0end*/}/*while*/closedir(dir);}/*isDIR*/else/*notadir*/{/*Changepathintofilename*/for(i=0,j=0;path[i]!='\0';i++)if(path[i]=='/')j++;k=j;for(j=0,i=0;jk;i++)if(path[i]=='/')j++;k=i;for(j=0;path[j+k]!='\0';j++)path[j]=path[j+k];path[j]='\0';/*Dealwiththeorders,notconsideringorder[1]---r*/if(order[2]==1){if(order[3]==1&&order[4]==1){if((st.st_size=h)&&(st.st_size=l))if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}elseif(order[3]==1&&order[4]==0){if(st.st_size=l)if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}elseif(order[3]==0&&order[4]==1){if(st.st_size=m)if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}elseif(order[3]==0&&order[4]==0){if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}}else{if(order[3]==1&&order[4]==1){if((st.st_size=h)&&(st.st_size=l)&&path[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}elseif(order[3]==1&&order[4]==0){if(st.st_size=l&&path[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}elseif(order[3]==0&&order[4]==1){if(st.st_size=m&&path[0]!='.')if(order[5]==1){if(((tp-st.st_mtime)/86400+1)=m)printf(%s\n,path);}elseprintf(%s\n,path);}elseif(order[3]==0&&order[4]==0){if(path[0]!='.')if(order[5]==1){if(((tp-st
本文标题:Unix第一次实验报告(编程实现程序list.c,列表普通磁盘文件等)
链接地址:https://www.777doc.com/doc-3368411 .html