Linux环境编程-完善ls剖析.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux环境编程-完善ls剖析

实验6-Linux环境编程ls 算法分析 总体流程: 1、对输入的参数进行快速排序)使得参数按字母顺序从A到Z排 2、判断输入参数是文件夹还是文件,文件夹加入head指向的链表,文件加入head指向的链表 3、用sortlslink函数对文件链表phead排序,showlslink函数对文件链表phead所有文件显示 4、用lspath函数文件链表pdhead文件夹遍历并对内的文件排序并排版显示(调用了sortlslinkshowlslink函数,对文件夹内的文件夹进行递归调用 重要函数流程: sortlslink函数对链表进行冒泡排序使得按字母顺序从A到Z排 showlslink函数根据参数l选择输出全部属性format_long_print函数)还是只输出文件名format_normal_print函数) format_normal_print函数调用pageMaker函数进行排版,之后在终端上 pageMaker函数先调用getRows函数计算排版后的行数getColsList函数计算每的宽度的文件名链表“置换”操作(“置换”之前输出到终端上是着排列从A到Z,“置换”之后输出到终端上是着排列从A到Z每个文件名加入空格以达到所在列的宽度 getRows函数获得终端的宽度,行数从1开始,计算的显示宽度行数计算列数,每列文件名显示宽度等于每列文件名的长度相加加上列之间的宽度),若宽度小于等于的宽度行数等于名数,行数停止增加并返回这个行数 getColsList函数根据计算并计算列的名的最大长度将其保存在colsList链表里 改进结果 ls与myls对比 ls vmware-tools-distrib/对比 ls m*与./myls m*对比 ls m?ls*与./myls m?ls*对比 遇到的问题及优化的 1、使用*和的参数好名或者文件夹,不是输入的带有通配符的字符串这样程序不需要文件名和文件名 2、getRows函数里行数从递增,效率低下,在文件数量多的情形下需要较多的时间得到行数 改进的myls源代码 #include stdio.h #include stdlib.h #include dirent.h #include string.h #include sys/stat.h #include sys/types.h #include sys/ioctl.h #include termios.h #include memory.h #include malloc.h #include getopt.h #include grp.h #include pwd.h #include unistd.h #include fcntl.h #include time.h #include error.h #include sys/types.h #include linux/kdev_t.h #define OPT_v 0x0001 /* -v 选项:查看本软件版本 */ #define OPT_h 0x0002 /* -h 选项:查看本软件帮助 */ #define OPT_l 0x0004 /* -l 选项:长型(long)显示 */ #define OPT_a 0x0008 /* -a 选项:显示所有文件(all)*/ #define OPT_R 0x0010 /* -R 选项:显示子目录内容 */ #define OPT_f 0x0020 /* -f 选项:不排序 */ #define DONE_SUCCESS 0 typedef struct _Node { char path[1024]; char name[256]; int length; struct stat st; struct _Node *pnext; } nNode; //由nCol构成的链表用于存储每列字符串在终端的宽度 typedef struct _Col { int length;//某列字符串在终端的宽度 struct _Col *pnext; } nCol; int createlslink(char *path,int flag,nNode **head) { DIR * dp; struct dirent *entry; struct stat statbuf; nNode *p; char abspath[1024]; if((dp=opendir(path))==NULL) { fprintf(stderr,cannot open directory:%s\n,path);

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档