资源描述:
《操作系用实验3参考答案.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验三文件系统的用户界面参考答案(一)实验目的进一步理解、使用和掌握文件的系统调用、文件的标准子例程,能利用和选择这些基本的文件操作完成复杂的文件处理工作。(二)源代码1.编写一个文件复制的C语言程序:分别使用文件的系统调用read(fd,buf,nbytes),write(fd,buf,nbytes)和文件的库函数fread(buf,size,nitems,fp),fwrite(buf,size,nitems,fp),编写一个文件的复制程序。#include#include#inc
2、lude/*copyfile,ifway==1,useread/write,elseusefread/fwrite,atthesametime,itcountstimeconsumed*/intmycopy(intway,intstep){time_tstart_tm,stop_tm;FILE*srcf,*destf;charbuff[1024];inti,sfd,dfd;time(&start_tm);//getstarttimefor(i=0;i<1024;i=i+step){if(way==1){
3、sfd=open("in.txt",O_RDONLY,0644);dfd=open("out.txt",O_WRONLY
4、O_CREAT
5、O_TRUNC,0644);read(sfd,buff,step);write(dfd,buff,step);close(sfd);close(dfd);}else{srcf=fopen("in.txt","r");destf=fopen("out.txt","w");fread(buff,step*sizeof(char),1,srcf);fwrite(buff,step*sizeo
6、f(char),1,destf);close(srcf);close(destf);}}time(&stop_tm);//getstoptimeprintf("timeusedforcopyfilebymeansof%s,%dbytepertime:%ds",way?"read,write":"fread,fwrite",step,(int)(stop_tm-start_tm));//printinformationfortestingreturn0;}intmain(intargc,char**argv){/*当上
7、述函数中nbytes,size和nitems都取值为1时(即一次读写一个字节),比较这两种程序的执行效率。*/if(mycopy(1,1))return1;if(mycopy(0,1))return1;/*当nbytes取1024字节,size取1024字节,且nitems取1时(即一次读写1024字节),再次比较这两种程序的执行效率。*/if(mycopy(1,1024))return1;if(mycopy(0,1024))return1;return0;}2.编写一个父子进程之间用无名管道进行数据传送的C程序。父进程
8、逐一读出一个文件的内容,并通过管道发送给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。#include#include#includeintmain(intargc,charargc){intsfd,dfd,n,chan[2];charbuff[1024];sfd=open("in.txt",O_RDONLY,0644);dfd=open("out.txt",O_WRONLY
9、O_CREAT
10、O_TRUNC,06
11、44);pipe(chan);//openapipeif(fork()){//startachildprocesstosendfilewhile((n=read(sfd,buff,1024))>0){close(chan[0]);write(chan[1],buff,n);close(chan[1]);}}else{//infatherprocess,receivefileclose(chan[1]);read(chan[0],buf,1024);write(dfd,buff,strlen(buff));close(ch
12、an[0]);}close(sfd);close(dfd);return0;}3.在两个用户的独立程序之间,使用有名管道,重新编写一个C程序,实现题3的功能。#include#include#include#includeintmain(