五个实验汇总(unix).doc

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

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

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

1亿VIP精品文档

相关文档