- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
洛阳师范学院UNIX实验报告-1
测试过程:(实验中出现的问题、错误、解决方法)
基本实现了函数的功能,在测试过程中会出现无法解决的问题,通过请教老师的讲解最终达到了老师的基本要求 实验总结:通过此次实验掌握类UNIX下程序开发的流程;
熟悉程序开发有关的工具软件;
掌握ANSI C的编程规范;
掌握文件系统访问的编程方法、数据结构、函数;
签名 2012 年 2 月 20 日 评语与成绩:
教师签名:
年 月 日 洛阳师范学院信息技术学院
软件实验报告
专业: 软件工程 课程: UNIX高级编程
学号: 姓名: 班级:
实验名称 编程环境 实验类型 验证型 实验时间 2012-2-22 实验环境 装有linux操作系统的虚拟机环境 实验目的与要求:
掌握类UNIX下程序开发的流程;
熟悉程序开发有关的工具软件;
掌握ANSI C的编程规范;
掌握文件系统访问的编程方法、数据结构、函数;
理解不同系统平台下编程的特点、区别。 实验内容:
编程实现例程1-5
使用vi编辑程序
分别使用gcc和cc编译生成可执行程序
分析、验证程序的功能
列出程序中包含的头文件,分别指出头文件包含程序中那些函数的原型
列出程序中用到了那些原始系统数据类型
分析该程序在调用execlp函数而执行子进程时,为什么不能传递参数?如果实现该功能,需要如何修改程序(提出方案)
编程实现指定目录的递归访问
分析、调试例程1-1
总结程序中用到哪些与目录操作相关的数据结构
如果在例程基础上增加“递归列出一个目录中的所有文件”,需要哪些数据结构、如何修改程序的逻辑结构?
通过搜索、查阅资料,提出上述问题的解决方案;
编程实现该方案; 实验步骤:(算法描述、源程序、操作步骤和方法)
习题1.5的头文件有
#includesys/types.h基本系统数据类型
#includesys/wait.h进程控制
#includestdio.h定义输入输出函数
#includestring.h字符串处理函数
#includeunistd.h符号常量
#includeerrno.h定义错误码
#includestdarg.h不定参数列表支持
Vsprintf()由stdarg.h stdio.h
printf(),Fgets(),Fputs(),Fprintf(),Fflush(),Sprintf()需要用到头文件stdio.h
函数execlp()需要用到unistd.h头文件以_t结尾的数据类型被称为原始系统数据类型。它们通常在头文件sys/types.h中定义(头文件unistd.h应已包括该头文件)。
1.5的程序用到的原始数据类型pid_t
在主程序中调用的execlp函数格式为:
Execlp(buf,buf,(char *)0);
因为传递的参数有误,以至于函数无法正常运行。
习题1.1
由题意“递归列出一个目录中的所有文件”知:应在
While((dirp=readdir(dp))!=NULL)
Printf(“%s\n”,dirp-d_name);
可写一子程序,对传递过来的参数(文件名)的属性进行判断,并输出文件名,若参数的属性为目录,则该函数调用自身(将传递的参数修改为本次输出的文件名)while循环体中即为调用的子函数名称,在子函数体
Readdir结构体
Stat结构体
只能查一级目录,因为调用子函数checkdir()传递的第一个文件是:“.”
文件“。”:本级目录文件。
子函数查到“.”文件,判断该文件为目录文件,同时将该文件的地址递归传递给checkdir。从而进入死循环,无法跳出,最后导致系统溢出。
采用if(S_ISDIR(buf.st_mode))
{ 判断是否为文件“.”或“..”
若不是则checkdir(参数);
}
该算法也陷入死循环,无法跳出。
老师的建议是在
if(S_ISDIR(buf.st_mode))
{
Open(文件);
Read(文件);
Close(文件);
}
使用读文件内容的方法,读取本级目录文件“.”中的所有内容,这样也省去了遍历所有目录文件的频繁递归,自己觉得这样就不能够说是递归算法了,只能是调用子函数,阅读本级目录文件的内容。
按照程序所写,若判断出argv[1]位置的文件为目录文件,则打开该文件并,读该文件的内容,并将独到的内容输出到终端上。但是没有成功。运行那个结果为:
文档评论(0)