首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
自考
分别使用文件的系统调用read(fd,buf,nbytes)、write(fd,buf,nbytes)和文件的库函数fread(buf,size,nitems,fp)、fwrite(buf,size,nitems,fp),编写一个文件的复制程序(文件大小>
分别使用文件的系统调用read(fd,buf,nbytes)、write(fd,buf,nbytes)和文件的库函数fread(buf,size,nitems,fp)、fwrite(buf,size,nitems,fp),编写一个文件的复制程序(文件大小>
admin
2016-05-14
20
问题
分别使用文件的系统调用read(fd,buf,nbytes)、write(fd,buf,nbytes)和文件的库函数fread(buf,size,nitems,fp)、fwrite(buf,size,nitems,fp),编写一个文件的复制程序(文件大小>1MB)。当上述函数中nbytes、size和nitems都取值为1时(即一次读写一个字节),比较这两种程序的执行效率。当nbytes取4096字节,size取1字节,且niterns取4096时(即一次读写4096字节),再次比较这两种程序的执行效率。(可使用time命令)
选项
答案
循环执行系统调用write(fd,buf,1),每次调用向文件输出一个字节,但由于块设备读写是通过系统缓冲区进行的,故4096次写调用才需要一次实际的设备I/O操作,但需要4096次从用户态转换到核心态和核心态转回用户态的开销。 循环执行系统调用fwrite(buf,1,1,fp)时,每次操作向用户态空间的流文件缓冲区写入一个字节,4096次写操作填满该缓冲区后才发出一次write系统调用,转换到核心态,并进行一次实际的设备I/O操作。 因此两种方法花费设备I/O的时间是一样的,主要差别是流文件操作用4096次用户态函数的调用和返回的开销代替了直接使用系统调用时4096次用户态与核心态之间的切换。在实际系统中,一次函数调用所费的时间比用户态与核心态之间的切换所费的时间少得多,故当不是以整块的方法输入或输出数据时,使用流文件操作比使用系统调用效率高很多。 在程序清单17-1中,用例程gettimeofday()(该例程返回两个值:秒数tv_sec和微秒数tv_uBec)获得程序的开始计时时间和结束计时时间(精度为微秒),并计算程序段运行时所花的时间(单位为毫秒),被测试的输入文件大于4MB。测试结果说明,每次对文件输入/输出一个字节,使用流文件要比直接使用系统调用快得多,而每次对文件输入/输出4096字节,使用流文件与使用系统调用时间差不多,使用系统调用还快了一点点。 程序清单17-1.file_op.c #include<sys/stat.h> #include<sys/fcntl.h> #include<stdi0.h> #include<time.h> #define BUB_4096 4096 #define BUB_11 main(int argc,char*argv[1]) { int fd1,fd2; int n; char buf1[BUB_1],buf2[BUB_4096],buf3[BUB_1],buf4[BUB_40964]; struct timeVal start,end; /*测试系统调用read、write*/ gettimeofday(&start,NULL); fd1=open(argV[1],O_RDONLY); fd2=open(argV[2],O_WRONLY|O CREAA.0644); while((n=read(fd1,buf1,BUB_1))>0) write(fd2,buf1,n); gettimeofday(&end,NULL); printf("One byte every times:%5.3f\n", end.tv Sec*1000-start.tv sec*1000+end.tv uSec/1000-Start.tv usec/ 1000); n=0; gettimeofday(&start,NULL); while((n=read(fd1,buf2,BUB_4096))>0) write(fd2,buf2,n); gettimeofday(&end,NULL); printf("4096 byte every times:%5.3f\n", end.tv Sec*1000-start.tv Sec*1000+end.tv usec/1000-Start.tv usec/1000); /*测试流文件调用fread、fwrite*/ BILE*fp1,*fp2; fp1=fopen(argv[1],"rb"); fp2=fopen(argv[3],"wb"); gettimeofday(&start,NULL); while((n=fread(buf3,BUB_1,1,fp1))>0) fwrite(buf3,BUB_1,1,fp2); gettimeofday(&end,NULL); printf("One byte every times:%5.3f\n", end.tv sec*1000-Start.tv Sec*1000+end.tv uSec/1000-Start.tv usec/1000); gettimeofday(&start,NULL); while((n=fread(buf4,BUB 4096,4096,fp1))>0) fwrite(buf4,BUB4096,4096,fp2); fclose(fp1); fclose(fp2); gettimeofday(&end,NULL); printf("4096 byte every times:%5.3f\n", end.tv sec*1000-start.tv sec*1000+end.tv usec/1000-Start.tv usec/1000); }。
解析
转载请注明原文地址:https://jikaoti.com/ti/ujEaFFFM
本试题收录于:
操作系统题库理工类分类
0
操作系统
理工类
相关试题推荐
按索赔目标分类,可分为()
流水节拍
索赔可以从不同角度分类,如按索赔目标分类,可分为()
在施工进度检查过程中,对不符合要求的部分进行调整,下列方法不正确的是()
在网络和信息安全中属于技术措施的第一道大门,其主要目的是提供访问控制和不可抵赖的作用,这描述的是___________。
凯撒密码的加密形式为ek(m)=(m+3)=cmod26,假定明文空问与密文空间都是26个大写的英文字母,同时将英文字母按顺序与模26的余数一一对应。试写出明文“OFDEQ”加密后的密文。
统计数据表明,温度超过规定范围时,每升高10℃,计算机的可靠性下降___________。()
端口扫描技术()
给定明文“plaintext”,采用向前移位算法加密,密钥为63152(每个数字表示其对应字母在英文字母表中向前移动的位数),密钥自动循环使用,请写出加密后的密文,并给出明文中每个字母的加密过程。
安装WindowsServer2003的活动目录必须具有________权限。
随机试题
A.Na+B.K+C.Ca2+D.球蛋白E.白蛋白
总图布置方案分析时,需参考国家有关防护距离规范,分析厂区与周围环境保护目标之间所定防护距离的可靠性,合理布置建设项目的各构筑物及生产设施,绐出()。
在总账系统中,关于账簿格式选择的叙述,正确的是()。
最早产生的金融期货品种是()。
什么是美?这个问题看似十分简单,一朵花、一片晚霞、一首诗、一曲音乐,我们觉得美;穿的衣服,用的家具,我们都会用审美的眼光,来说它们美不美。但是【①】认真追问一下:究竟什么是美?我们【②】往往会瞠目结舌,不知所答。在对美进行追问的过程中,首先碰到的
在许多名人故里的“文化发展规划”思路中,少不了要修建各式各样所谓的“融文化、商业、休闲于一体”的广场,因此必有对名人故居周边建筑的大拆迁。有人以这些周边建筑并没文物价值为理由,其实即便只有几十年的建筑,它们与被保护的名人故居历史建筑已形成一种新的历史环境。
翻译时“直译”偏重对原文的忠实,“意译”侧重译文语气的顺畅。哪种译法最妥当,人们各抒己见。依我看,直译和意译的分别根本不应存在。忠实的翻译必定能尽量表达原文的意思。思想感情与语言是一致的,相随而变的。一个意思只有一个精确的说法,换一个说法,意味就完全不同,
根据下列材料回答问题。 某机构对A国科研工作者进行了调查,发现现阶段女性科研工作者的申请基金情况以及薪资水平仍然不乐观。下面是A国科研工作者的人数,以及男性、女性科研工作者申请A国NIH基金和平均工资水平的比较。假设科研工作者都有博士学位,在20
USB可以实现高达127个设备的串列连接,但是在实际应用中,也许串联3到4个设备就可能导致一些设备失效。而且大多数USB产品,只有一个输入口,根本无法再连接下一个USB设备。另外,尽管USB本身可以提供500mA的电流,但一旦碰到高电耗的设备,就会导致供电
A、improvestaffproductivityB、identifyproblemareasC、retrainweakmanagementD、managethecompanyB
最新回复
(
0
)