资源描述:
《操作系统-实验三.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统-实验三文件系统的用户界面一、实验目的进一步理解、使用和掌握文件的系统调用、文件的标准子例程,能利用和选择这些基本的文件操作完成复杂的文件处理工作。二、实验题目1.编写一个文件复制的C语言程序:分别使用文件的系统调用read(fd,buf,nbytes),write(fd,buf,nbytes)和文件的库函数fread(buf,size,nitems,fp),fwrite(buf,size,nitems,fp),编写一个文件的复制程序(文件大小>1M),文件可以编一个C程序来生成,或使用/usr/bin下的二进制执行文件。调用格式例如:copyfile1
2、file2#includemain(intargc,char*argv[]){…fd1=open(argv[1],O_RDONLY);//系统调用creat(argv[2],0660);fd2=open(argv[2],O_WRONLY);while((n=read(fd1,buf,BUFSIZE))>0)write(fd2,buf,n);…main带参的调用方法例(含测试时间):time./mycpinfileoutfile流文件的实验程序请参考该程序完成。上述函数中nbytes,size和nitems都取值为1时(即一次读写一个字节),比较
3、系统调用和流文件两种程序的执行效率。当nbytes取4096字节,size取1字节且nitems取4096时(即一次读写4096字节),再次比较这两种程序的执行效率(文件大小>1M)。如:创建大文件的方法之一,比如用creat创建一个新文件,用open写打开该文件,用lseek将写指针移到很远处,写入随便一个字符。比如移动0x100000,用write写个“1”,就会得到一个1M大小的文件。也可到Linux的/usr/bin找一个1~3M左右的大的执行文件。对于单独使用的速度较快的计算机,文件要10M~100M。2.编写一个父子进程之间用无名管道进行数据传送的C
4、程序。父进程逐一读出一个文件的内容,并通过管道发送给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。3.在两个用户的独立程序之间,使用有名管道,重新编写一个C程序,实现题2的功能。一、源代码1.编写一个文件复制的C语言程序:分别使用文件的系统调用read(fd,buf,nbytes),write(fd,buf,nbytes)和文件的库函数fread(buf,size,nitems,fp),fwrite(buf,size,nitems,fp),编写一个文件的复制程序。程序一#defineBUFSIZE4096#i
5、nclude#include#include#includeintmain(intargc,char*argv[]){printf("这个是一次4096个字节的运行结果:");intinputFd,outputFd,n,mode;charbuf[BUFSIZE];inputFd=open(argv[1],O_RDWR
6、O_CREAT,0777);outputFd=open(argv[2],O_WRONLY
7、O_CREAT,0777);charstr[20]="MynameisLXC"
8、;lseek(inputFd,1000000,0);write(inputFd,str,strlen(str));lseek(inputFd,0,0);while((n=read(inputFd,buf,BUFSIZE))>0)write(outputFd,buf,n);close(inputFd);close(outputFd);return0;}以下为输出结果:xc@ubuntu:~$time./copyInputDataOutputData这个是一次一个字节的运行结果:real0m1.597suser0m0.064ssys0m1.500slxc@ubunt
9、u:~$gccCopyFile.c-ocopylxc@ubuntu:~$time./copyInputDataOutputData这个是一次4096个字节的运行结果:real0m0.002suser0m0.000ssys0m0.000slxc@ubuntu:~$程序二#defineBUF_SIZE1#include#includeintmain(intgrgc,char*argv[]){printf("这个是一次读取1个字节");FILE*inputFp,*outputFp;inputFp=fopen(argv[1],"r+
10、");outputFp=