实验二目录树的遍历.doc

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

实验二 目录树的遍历 张冰 22920132203923 2015/10/18 实验目的 掌握与文件和目录树有关的系统调用和库函数。 实验内容 1.编写程序myfind 命令语法: ??????? myfind? pathname? [-comp filename | -name str…] 命令语义: (1)myfind? pathname 的功能: 除了具有与程序4-7相同的功能外,还要输出在pathname目录子树之下,文件长度不大于4096字节的常规文件,在所有允许访问的普通文件中所占的百分比。程序不允许打印出任何路径名。 (2)myfind? pathname? -comp?filename的功能: filename是常规文件的路径名(非目录名,但是其路径可以包含目录)。命令仅仅输出在pathname目录子树之下,所有与filename文件内容一致的文件的绝对路径名。不允许输出任何其它的路径名,包括不可访问的路径名。 (3)myfind? pathname? -name str…的功能: str…是一个以空格分隔的文件名序列(不带路径)。命令输出在pathname目录子树之下,所有与str…序列中文件名相同的文件的绝对路径名。不允许输出不可访问的或无关的路径名。 pathname和filename均既可以是绝对路径名,也可以是相对路径名。pathname既可以是目录,也可以是文件,此时,目录为当前工作目录。 2.注意尽可能地提高程序的效率。注意避免因打开太多文件而产生的错误。 3.遍历目录树时,访问结点(目录项)的具体操作应当由遍历函数dopath携带的函数指针参数决定。这样程序的结构清晰,可扩充性好。 实验过程 实验本身是基于课本程序4—7,在此基础上进行扩展。除了列出各类型文件所占百分比之外,还需增加三个函数功能,这将通过myfunc1、myfunc2、myfunc3来实现。 首先要理解课本的三个主要函数:myftw、dopath和myfunc。myftw和dopath函数实现递归遍历目录,再调用myfunc函数统计各类型文件所占比例。 当argc=2时,只需要在myfunc函数和main函数中做出修改,统计出文件长度不大于4096的文件及其所占百分比,命名为myfunc1函数。 argc为4且argv[2] == “-comp”时,命令格式为: myfind pathname -comp filename 为提高程序效率,在比较文件是否相同时,可先比较两个文件的大小,如果大小不同,则内容肯定不同,这样就免去了读文件所浪费的时间;如果大小相同,则再通过读文件进行比较。此时应当注意输入缓冲区不必开的太大,你可以从实验二得到启发。由于要求输出符合要求的文件的绝对路径名,因此当参数pathname不是绝对路径时,要调用getcwd()等函数来取得文件的绝对路径名。通过myfunc2实现。 argc 大于等于4且argv[2] == “-name”时,命令格式为: myfind pathname -name str… 实现方法可以通过循环,把当前遍历的文件名和str这个序列中的文件名进行比较,如果和序列中的一个文件名相同,就符合条件,此时输出符合条件的文件的绝对路径名。通过myfunc3实现。 实验结果 程序名:myfind.c 可执行文件:myfind 执行命令:./myfind /home 执行命令:./myfind /home -comp apue.h 执行命令:./myfind /home -name apue.h hello.c 体会与建议 这次实验感觉很长很麻烦,但是好在书上已经给出了大部分相关代码,所以完成起来还会稍微容易一些,主要就是完成myfunc2和myfunc3的编写。感觉非常困难的地方就是很多函数的参数并不会用,尤其是有很多指针变量,看起来就很头疼,比较费事。 程序编译的过程中出现最多的错误就是函数没有定义,其实就是因为缺少了相应的头文件,比如path_alloc.c文件,就是出错以后才加上去的,还有就是err_ret这些函数,用了就会报错所以我最后都用printf函数代替了,也能正常运行出结果。 一开始看到题目的时候还不太明白-comp和-name两个命令有什么区别,在运行完之前才发现两个函数实现的功能是很不一样的,例如apue.h这个文件,如果用-comp命令,会发现有一些目录下的该文件显示can’t open,而用-name时就不会出现这个提示。我觉得应该是有些目录下的文件对读取该文件的内容有限制,所以才会can’t open吧。 还是建议老师上课的时候能把程序详细讲解一下,因为好多地方都看不懂啊……

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档