- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
五个实验汇总(unix)
实验1 同步与异步write的效率比较 (10分)
目的:
掌握UNIX的文件I/O系统调用。
要求:
1、编写程序
timewrite outfile [sync]
不得变更程序的名字和使用方法。sync参数为可选,若有,则输出文件用O_SYNC打开。
例:
timewrite f1 f2 表示输出文件f2不用O_SYNC 打开。
timewrite f1 sync f2 表示输出文件f1用O_SYNC 打开。
2、显示的时间应当尽量接近write操作过程所花的时间。不要将从磁盘读文件的时间计入显示结果中。
3、严格按p55表3-2的结果格式输出(BUFFSIZE从256开始起算直至128K),抬头和分割线省略。
4、10月12日晚上12点为实验完成截止期。
时间获取可以用库函数times,请自行掌握它的功用。
一、实验名称:
实验1 同步与异步write的效率比较
二、实验内容及要求描述:
1、编写程序
timewrite outfile [sync]
不得变更程序的名字和使用方法。sync参数为可选,若有,则输出文件用O_SYNC打开。
例:
timewrite f1 f2 表示输出文件f2不用O_SYNC 打开。
timewrite f1 sync f2 表示输出文件f1用O_SYNC 打开。
2、显示的时间应当尽量接近write操作过程所花的时间。不要将从磁盘读文件的时间计入显示结果中。
3、严格按p55表3-2的结果格式输出(BUFFSIZE从256开始起算直至128K),抬头和分割线省略。
4、10月12日晚上12点为实验完成截止期。
时间获取可以用库函数times,请自行掌握它的功用。
三、设计和实现的主要原理、构思、算法、执行过程或技巧,必要的注释和说明:
1、系统调用times()函数的说明
#includesys/times.h
clock_t times(struct tms *buf);
struct tms{
clock_t tms_utime;//记录进程除系统调用外所使用的CPU时间
clock_t tms_stime;//记录进程的系统调用所使用的CPU时间
clock_t tms_cutime;//记录子进程除系统调用外所使用的CPU时间
clock_t tms_cstime;//记录子进程的系统调用所使用的CPU时间
};
times函数的返回值是进程迄今为止的存活时间。所有时间都是以“滴答”为单位的,函数sysconf(_SC_CLK_TCK)可以获得所运行系统每秒的滴答数(参照的是课本2.5.4)。
2、将打开的文件的BUFFSIZE大小的块读入缓冲区,循环执行到全部读完,在每次读的过程中调用write进行写操作。
3、在每次写之前调用时间函数测量一次时间,之后再调用一次时间函数测量时间,两次时间差就是write的时间,将其记录就得到了write写整个文件的时间。
4、每次将BUFFSIZE增大两倍,调用lseek函数使文件偏移量在整体读完一次后返回文件开头。
5、具体程序见timewrite.c文件。
6、计算write耗费的时间:
为了准确计算writ耗费的时间,很重要的就是要避免将read的时间计入,因为I/O操作的时间通常是毫秒级的,不可以忽略。一种有效的方法是,设置一个与输入文件长度相同的缓冲 区,一次性地将输入文件读入缓冲区,而后就不必再读入文件。这样就可以有效避免计入read的时间。
设置输入缓冲区时需要知道输入文件的长度,可以利用lseek的返回值来获取文件的长度(参照的是课本3.6)。
在对每个给定大小的输出缓冲区计算写文件的时间时,应当在开始写之前调用times(),记录下开始时间,然后在整个输入缓冲区都复制到输出文件之后,在调用times(),两次的时间间隔,就是在这个给定大小的输出缓冲区的限制下,复制整个输入文件所耗费的写时间。至于在每一次写的时候所执行的其它语句,它们相较于I/O操作,所花费的时间极短,可以忽略不计。
四、实验结果:
1、源程序名:timewrite.c
2、可执行程序名:timewrite
3、编译生成可执行程序的方法:
输入gcc timewrite.c -o timew
文档评论(0)