- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程实现程序listc,列表普通磁盘文件
UNIX第一次实验报告班级:2012211307 姓名:LZ实验目的实验目的:练习vi ,使用UNIX的系统调用和库函数,体会UNIX文件通配符的处理方式以及命令对选项的处理方式。实验内容及完成情况实验内容:编程实现程序list.c,列表普通磁盘文件(不考虑目录和设备文件等) ,列出文件名和文件大小。与ls命令类似,命令行参数可以有0到多个 0个参数:列出当前目录下所有文件参数为普通文件:列出文件参数为目录:列出目录下所有文件实现自定义选项r,a,l,h,m以及-- r 递归方式列出子目录 a 列出文件名第一个字符为圆点的普通文件(默认情况下不列出文件名首字符为圆点文件) l 后跟一整数,限定文件大小的最小值(字节) h 后跟一整数,限定文件大小的最大值(字节) m 后跟一整数n,限定文件的最近修改时间必须在n天内 --仿照ls命令,以当前目录为路径,默认无r\a\l\h\m进行打印完成情况:完成了上述的所有内容,并发现了一些问题,并解决了部分问题:在递归列出文件名第一个字符为圆点的普通文件时,会出现死循环的情况,因为目录中隐藏有.和..文件,指向本目录和父目录。在递归列出文件的地方做一个判断:如果是.和..文件则不予处理。List . 和list.. 分别是打印当前目录和父目录。若是ls --,则仿照ls命令,以当前目录为路径,默认无r\a\l\h\m进行打印。当文件名中含有空格时,无法识别该文件,该问题从用户输入的角度解决。当文件名与命令选项同名时,无法分辨文件,如文件叫-a,无法打印-a的信息,目前该问题未解决。程序设计思路GetOption(int argc, char* argv[])使用char getopt(int argc, char* argv[], char*)函数,对输入进行判断,并对r/a/l/h/m/?等选项进行标记,以便后续进行操作时使用;同时,抓出path。DistinguishFileType(char * path)如果用户未指定路径,则使用当前路径。打开文件的i节点,判断文件类型:如果是目录文件,则执行IsDIR( path);如果是普通磁盘文件,则执行print(path);如果是其他类型文件,输出不对该文件进行信息显示。Int print(char* path)打开path所对应的文件的i节点;通过文件类型及l/h/m/a等选项判断该文件是否符合输出要求:如果符合,则打印;不符合,则返回。IsDIR(char* path)先打印自己的信息;进入目录;如果非递归打印:逐个打印目录内的文件,即对每个条目执行print操作;如果是非递归打印:判断是否是.和..文件,是则不予处理;不是则执行DistinguishFileType(dirp-d_name);关闭目录。回到父目录。实验结果0个参数:列出当前目录下所有文件参数为普通文件:列出文件参数为目录:列出目录下所有文件r 递归方式列出子目录(深度优先方式) a 列出文件名第一个字符为圆点的普通文件(默认情况下不列出文件名首字符为圆点文件) l 后跟一整数,限定文件大小的最小值(字节)h 后跟一整数,限定文件大小的最大值(字节)--仿照ls命令,以当前目录为路径,默认无r\a\l\h\m进行打印List . 和list.. 分别是打印当前目录和父目录。问题与收获问题:stat和lstat函数的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。段转移错误:刚开始把代码链接后执行的时候,执行时会有段转移错误。究其原因,很多是由于编译时没有报警告而发生的。在编译时,gcc后面加入-Wall, 查看其警告并进行修正,就解决了这个错误。回到父节点:在递归列出文件名第一个字符为圆点的普通文件时,会出现死循环的情况,因为目录中隐藏有.和..文件,指向本目录和父目录。在递归列出文件的地方做一个判断:如果是.和..文件则不予处理。文件名字又空格时,无法指定该文件。如,在Document文件夹中有一个test layer 0文件,把它作为路径,提示找不到。分析这个错误,是因为getoption没有把这几个空格分开的单词组成一个路径。在把文件夹去掉空格,就可以打印它的目录了。解决方案1:使用双引号把路径引起来解决方案2:使用转移字符转义当文件名与命令选项同名时,无法分辨文件,如文件叫-a,无法打印-a的信息,目前该问题未解决。收获:体验了高大上的Ubuntu系统;对系统调用有了更深刻的理解;体会到了解一些相关的函数是非常重要的,在源代码,即下一章中,用加粗标识了一些在本次实验中新了解和使用的函数。源代码/*加粗的函数是本次实验中新get的技能*/#include sys/stat.h #include s
文档评论(0)