操作系统-实验三.docx

操作系统-实验三.docx

ID:52184428

大小:557.06 KB

页数:16页

时间:2020-03-24

操作系统-实验三.docx_第1页
操作系统-实验三.docx_第2页
操作系统-实验三.docx_第3页
操作系统-实验三.docx_第4页
操作系统-实验三.docx_第5页
资源描述:

《操作系统-实验三.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=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。