资源描述:
《交大继续教育学院操作系统实验3参考答案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验三文件系统的用户界面参考答案(一)实验目的进一步理解、使用和掌握文件的系统调用、文件的标准子例程,能利用和选择这些基本的文件操作完成复杂的文件处理工作。(二)源代码1.编写一个文件复制的c语言程序:分别使用文件的系统调用和文件的库函数fread(buf,read(fd,buf,nbytes),write(fd,size,nitems,fp),fwrite(buf,buf,nbytes)size,nitems,fp),编写一个文件的复制程序。再计算两者之差下面的程序是调用time分别获得程序段运行的开始时间和结束时间,获得程序段
2、运行的时间。当然最方便的方法是在所运行的程序前面加上time,其运行方法是:time命令[命令参数]命令执行完成后,time程序显示命令运行所用的总时间,系统花费的时间和命令的纯执行时间,UNIX中单位为10毫秒,Linux中单位为毫秒。但这种方法得到的是程序运行的总时间,而不能得到某一程序段的运行时间。#include#inelude#inelude/*copyfile,ifway==1,useread/write,elseusefread/fwrite,atthesame
3、time,itcountstimeconsumed*/intmycopy(intway,intstep){time_tstart_tm,stop_tm:FILE*srcf,*destf;charbuff[4096];inti,sfd,dfd;time(&start_tm);//获得起始时间for(i=0;i<1024;i=i+step){if(way==1){sfd=open(nin.txr,O_RDONLY,0644);//输入文件dfd=open(nout.txtM,O_WRONLY
4、O_CREAT
5、O_TRUNC,0644)
6、;//输出文件read(sfd,buff,step);write(dfd,buff,step);close(sfd);close(dfd);}else{srcf=fopen(Hin.txtH,HrH);destf=fopen(Hout.txtH,nwH);fread(buff,step*sizeof(char),1,srcf);fwrite(buff,step*sizeof(char),1,destf);close(srcf);close(destf);time(&stop_tm);//获得结束时间printf("timeus
7、edforcopyfilebymeansof%s,%dbytepertime:%dsH,way?Hread,writeH:Hfread,fwriteH,step,(int)(stop_tm-start_tm));//printinformationfortestingreturn0;intmain(intargc,char**argv)/*当上述函数中nbytes,size和nitems都取值为1时(即一次读写一个字节),比较这两种程序的执行效率。*/if(mycopy(1,1))return1;if(mycopy(0,1))re
8、turn1;/*当nbytes取1024字节,size取1024字节,且nitems取1时(即一次读写1024字节),再次比较这两种程序的执行效率。*/if(mycopy(1,1024))return1;if(mycopy(0,1024))return1;return0;}2.编写一个父子进程之间用无名管道进行数据传送的C程序。父进程逐一读出一个文件的内容,并通过管道发送给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。#include#include9、ng.h>#includeintmain(intargc,charargc){intsfd,dfd,n,chan[2];charbuff[1024];sfd=open(nin.txtH,O_RDONLY,0644);//输入文件dfd=open(Hout.txr,O_WRONLY
10、O_CREAT
11、O_TRUNC,0644);pipe(chan);//openapipeif(fork()){//startachildprocesstosendfilewhile((n=read(sfd,buff,1024))>0){
12、close(chan[0]);write(chan[1],buff,n);close(chan[1]);}}else{//infatherprocess,receivefileclose(chan[1]);read(chan[0],buf,1024