操作系统-实验三

上传人:suns****4568 文档编号:89228826 上传时间:2019-05-21 格式:DOC 页数:16 大小:557.06KB
返回 下载 相关 举报
操作系统-实验三_第1页
第1页 / 共16页
操作系统-实验三_第2页
第2页 / 共16页
操作系统-实验三_第3页
第3页 / 共16页
操作系统-实验三_第4页
第4页 / 共16页
操作系统-实验三_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《操作系统-实验三》由会员分享,可在线阅读,更多相关《操作系统-实验三(16页珍藏版)》请在金锄头文库上搜索。

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下的二进制执行文件。调用格式例如:copy file1 fi

2、le2#include main(int argc, char*argv) fd1=open(argv1, O_RDONLY); /系统调用creat (argv2, 0660);fd2=open(argv2, O_WRONLY);while(n=read(fd1, buf, BUFSIZE)0)write(fd2, buf, n);main带参的调用方法例(含测试时间):time ./mycp infile outfile流文件的实验程序请参考该程序完成。上述函数中nbytes, size和nitems都取值为1时(即一次读写一个字节),比较系统调用和流文件两种程序的执行效率。当nbytes

3、取4096字节,size取1字节且nitems取4096时(即一次读写4096字节),再次比较这两种程序的执行效率(文件大小1M)。如:创建大文件的方法之一,比如用creat 创建一个新文件,用open写打开该文件,用lseek将写指针移到很远处,写入随便一个字符。比如移动0x100000,用write写个“1”,就会得到一个1M大小的文件。也可到Linux的/usr/bin找一个13M左右的大的执行文件。对于单独使用的速度较快的计算机,文件要10M100M。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),编写一个文件的复制程序。程序一#define BUFSIZE 4096#include #include #include #include int main(int

5、argc, char *argv)printf(这个是一次4096个字节的运行结果:n);int inputFd, outputFd, n, mode;char bufBUFSIZE;inputFd = open(argv1,O_RDWR|O_CREAT, 0777);outputFd = open(argv2,O_WRONLY|O_CREAT, 0777);char str20 = My name is LXC;lseek(inputFd, 1000000, 0);write(inputFd, str, strlen(str);lseek(inputFd, 0, 0);while(n=rea

6、d(inputFd, buf, BUFSIZE)0)write(outputFd,buf, n);close(inputFd);close(outputFd);return 0;以下为输出结果:xcubuntu:$ time ./copy InputData OutputData这个是一次一个字节的运行结果:real0m1.597suser0m0.064ssys0m1.500slxcubuntu:$ gcc CopyFile.c -o copylxcubuntu:$ time ./copy InputData OutputData这个是一次4096个字节的运行结果:real0m0.002sus

7、er0m0.000ssys0m0.000slxcubuntu:$ 程序二#define BUF_SIZE 1#include #include int main(int grgc, char *argv)printf(这个是一次读取1个字节);FILE *inputFp,* outputFp;inputFp = fopen(argv1,r+);outputFp = fopen(argv2,w+);char BUFBUF_SIZE;while (!feof(inputFp)fread(BUF, BUF_SIZE, 1, inputFp);fwrite(BUF, BUF_SIZE, 1, outp

8、utFp);fgetc(inputFp);fclose(inputFp);fclose(outputFp);以下为输出结果lxcubuntu:$ gcc CopyFileV2.c -o copylxcubuntu:$ time ./copy InputData OutPutData这个是一次读取4096个字节real0m0.004suser0m0.000ssys0m0.000slxcubuntu:$ gcc CopyFileV2.c -o copylxcubuntu:$ time ./copy InputData OutPutData这个是一次读取1个字节real0m0.038suser0m0

9、.032ssys0m0.000slxcubuntu:$ 2、编写一个父子进程之间用无名管道进行数据传送的C程序。父进程逐一读出一个文件的内容,并通过管道发送给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。程序#define BUFF_SIZE 1024#include #include #include int main(int argc, char *argv)int sfd, dfd, n, chan2;char buffBUFF_SIZE;sfd = open(InputData, O_RDONLY, 0644);dfd = open

10、(OutputData, O_WRONLY|O_CREAT|O_TRUNC, 0644);pipe(chan);if(fork()close(chan0);while(n = read(sfd, buff, BUFF_SIZE)0)write(chan1, buff, n);close(chan1);elseclose(chan1);read(chan0, buff, BUFF_SIZE);write(dfd, buff, strlen(buff);close(chan0);close(sfd);close(dfd);return 0;以下为输出结果:3、在两个用户的独立程序之间,使用有名管道

11、,重新编写一个C程序,实现题2的功能。程序:写管道端#define BUFSIZE 256#include #include #include #include int main(int argc, const char *argv)int writeFifoFd, inputDataFd, n;char bufBUFSIZE;mknod(fifo,S_IFIFO|0666,0);writeFifoFd = open(fifo,O_WRONLY);inputDataFd = open(InputData.txt,O_RDONLY);while(n=read(inputDataFd, buf,

12、BUFSIZE)0)write(writeFifoFd,buf,n);close(inputDataFd);close(writeFifoFd);return 0;读管道端#define BUFSIZE 256#includeint main(int argc, const char *argv)int readFifoFd, outputDataFd, n;char bufBUFSIZE;readFifoFd = open(fifo,O_RDONLY);outputDataFd = open(OutputData.txt, O_CREAT|O_WRONLY, 0644);while(n =

13、read(readFifoFd, buf, sizeof(buf)!=0)write(outputDataFd,buf,n);close(readFifoFd);close(outputDataFd);return 0;运行结果Unix实用程序一、 实验目的熟悉和掌握Unix的shell命令,正则表达式和过滤器程序的使用。二、 实验题目1. 上机练习ls,ln,ln s,file,chown,chmode,head,taill,find等命令。1) 假定当前目录中没有ls.save文件,先后键入ls l和ls l ls.save两个命令。请将第一个ls命令的输出和第二个命令的输出文件ls.sa

14、ve中的内容作仔细比较。两者有何不同?并加以解释。2) 比较ls,ls *,ls .,ls .* ,ls .?* 这些命令的输出有何不同?3) 以下两条命令:mv file1 file2cp file1 file2;rm file1的执行效果是否总是相同的?请仔细推敲并上机验证(提示:如是软连接如何)。4) 在当前的目录树中显示当天修改的c源程序名。2. 掌握正则表达式的匹配规则,上机练习grep、awk命令。1) 按相反的次序显示输入行及行号。2) 统计输入单词的频度。3. 上机练习df,du,tar命令。4. 上机练习ps,time,nohub命令。5. 上机练习compress,gzip和man等命令。三、 实验结果(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号