北京邮电大学Unix编程环境课程第一次实验报告ls命令.docxVIP

北京邮电大学Unix编程环境课程第一次实验报告ls命令.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 13 实验报告 实验名: Unix编程第一次实验 课程名: Unix编程环境 姓名: 学号: 班级: 实验目的: 练习vi,使用UNIX的系统调用和库函数,体会UNIX文件通配符的处理方式以及命令对选项的处理方式。 实验要求: 编程实现程序list.c,列表普通磁盘文件(不考虑目录和设备文件等),列出文件名和文件大小。 与ls命令类似,命令行参数可以有0到多个 0个参数:列出当前目录下所有文件 参数为普通文件:列出文件 参数为目录:列出目录下所有文件 实现自定义选项r,a,l,h,m以及-- r 递归方式列出子目录 a 列出文件名第一个字符为圆点的普通文件(默认情况下不列出文件名首字符为圆点的文件) l 后跟一整数,限定文件大小的最小值(字节) h 后跟一整数,限定文件大小的最大值(字节) m 后跟一整数n,限定文件的最近修改时间必须在n天内 显式地终止命令选项 程序说明: 命令选项的存储: struct options { Int aFlag, rFlag,lFlag,hFlag,mFlag; long lPara,hPara; int mPara; }; 采用 struct options结构存储命令的选项,flag代表有无此选项,例如aFlag为1就表示有“-a”选项,aFlag为0则表示没有“-a”选项。 lPara、hPara和mPara用来存储”-l”、”-h”、”-m”选项所带的参数。 命令的读取: struct path { char* path; struct path* next; }; 采用函数getCommend读取命令,声明一个opEnd变量用来指示选项的输入是否结束。opEnd初始为0,代表选项的输入没有结束,当遇到“--“之后,opEnd置为1,代表选项输入结束。在opEnd为0的时候,命令中以”-“开头的,都认为是一个选项,在opEnd为1的时候,命令中以”-“开头的则不作为选项而作为命令的参数。 在识别选项的同时,也要读入命令的参数,命令的参数也就是文件地址,存储在结构struct path所组成的链表当中。在读完命令之后,需要判断一下链表是否为空,如果链表是空的则代表命令中没有参数,这是需要程序自动得把当前目录即”./“加入链表当中。 选项的判断: int judje(struct options option,struct stat info,char* fileName) 采用函数 judje函数判断一个文件是否满足选项的要求,如果满足要求返回1,否则返回0。 选项的参数的获取: int getPara(char* option) 采用函数getPara获取选项所带的参数,如果参数合法则把参数转化为int并返回,如果参数不合法,比如参数中字母或符号等则返回-1; 打印: void listFiles(char* path,struct options option) 采用函数listFiles打印文件,当需要递归时,把当前打印的目录和需要递归的文件目录合并在一起传入listFiles中,进行递归。 实验结果: 输入命令:./list 不加选项和参数 输入命令:./list –a 打印文件名”.”开头的文件名及大小 输入命令:./list –l 4000 输出大小在4000自己以上的文件名及大小 输入命令:./list –h 5000 输出大小在5000字节一下的文件名及大小 输入命令:./list –m 2 打印两天之内修改过的文件名及大小 输入命令:./list –r | more 循环打印文件名及大小 输入命令:./list –r -- -a 循环打印文件名是-a的文件夹 输入命令:./list test*(相当于./list test test2) Test: Test2: 输入命令:./list list.c 打印list.c 文件 输入命令:./list –l 3000 –h 5000 –r –a -- /home/andy | more(复杂命令) 实验总结: 在打印过程中需要考虑一下集中特殊情况: 命令中没有参数 输入的路径本身就是一个文件 目录中“.”文件和”..”文件的问题。 对于第一种情况: 假如没有考虑到这个情况会导致没有任何输出的问题,而这个情况下是应该打印当前目录的。在编程中可以判断一下命令是否带有参数,如果没有参数就把当前目录当作参数传给程序。 对于第二种情况: 假如不考虑这个问题,会导致直接显示无法打开文件的情况。编程中可以首先判断一下,输入的

文档评论(0)

22255990 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档