自己实现linux下ls命的代码.doc

上传人:大米 文档编号:562986355 上传时间:2023-07-17 格式:DOC 页数:7 大小:29.50KB
返回 下载 相关 举报
自己实现linux下ls命的代码.doc_第1页
第1页 / 共7页
自己实现linux下ls命的代码.doc_第2页
第2页 / 共7页
自己实现linux下ls命的代码.doc_第3页
第3页 / 共7页
自己实现linux下ls命的代码.doc_第4页
第4页 / 共7页
自己实现linux下ls命的代码.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《自己实现linux下ls命的代码.doc》由会员分享,可在线阅读,更多相关《自己实现linux下ls命的代码.doc(7页珍藏版)》请在金锄头文库上搜索。

1、自己实现linux下ls命令的代码/*CopyRight, (C) 2012*ls命令很常用,但很少人知道内部实现,更别说自己来实现了*本文目的为实现一个简单的ls命令:包括:a、l参数解析,文*件、目录等属性解析,也是学习IO操作的好例子。*/#include #include #include #include #include #include #include #include #include #include int do_ls(char *dir,char *filename,int lflag)int n;struct stat buf;char out100;struct p

2、asswd *pw;struct group *gr;struct tm *t;if(lflag = 0)/如果不带l参数,直接显示文件/目录名printf(%st,filename);return 0;if(lstat(dir,&buf)=0;n-)/打印文件的读写属性:读r、写w、执行x、无权限-if(buf.st_mode&(1pw_name);gr = getgrgid(buf.st_gid);/所属组名printf( %s,gr-gr_name);printf( %ld,buf.st_size);/字节计总大小t = localtime(&buf.st_atime);/最后一次访问时

3、间printf( %d-%d-%d %d:%d,t-tm_year+1900,t-tm_mon+1,t-tm_mday,t-tm_hour,t-tm_min); printf( %s ,filename); if(S_ISLNK(buf.st_mode)/判断是否为链接,是返回真printf( - );if(readlink(filename,out,100)=-1)/printf(readlink errorn);printf(%s,out);printf(n);return 0;int ls_prepare(char *w,int aflag,int lflag)/ls的准备工作struc

4、t stat buf;/man lstat可以看到此结构char name100;DIR *dir;/类似打开文件的fd描述符struct dirent *pdr;/man readdir可以看到此结构if(lstat(w,&buf)d_name0=.)continue;memset(name,0,100);strcpy(name,w);/拷贝strcat(name,/);/追加strcat(name,pdr-d_name);do_ls(name,pdr-d_name,lflag);else/有a参数显示所有memset(name,0,100);strcpy(name,w);strcat(na

5、me,/);strcat(name,pdr-d_name);do_ls(name,pdr-d_name,lflag);closedir(dir);else/为文件则直接显示do_ls(w,w,lflag);return 0;int main(int argc,char *argv)int aflag =0;int lflag =0;char c;int i;while(c = getopt(argc,argv,al)!=-1)/解析命令行参数,即-/-后面的字符串和给定的字符串匹配,有未解析字母返回字母或问号(取决于第3个参数),否则返回-1switch(c)/此处仅匹配a(所有)和l(列表),即只支持参数a、lcase a:aflag =1;break;case l:lflag =1;break;default:break;if(argc = optind )/optind系统变量,执行命令参数的个数(不包括命令,奇怪的是无参情况下他为1),判断argc是否为1,是则取当前路径,让我们显得更专业点ls_prepare(./,aflag,lflag);elsefor(i=optind;iargc;i+)/所有目录都传进去ls_prepare(argvi,aflag,lflag);printf(n);return 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号