操作系统-实验三 下载本文

内容发布更新时间 : 2024/6/24 3:37:40星期一 下面是文章的全部内容请认真阅读。

操作系统-实验三

操作系统-实验三 文件系统的用户界面

一、 实验目的

进一步理解、使用和掌握文件的系统调用、文件的标准子例程,能利用和选择这些基本的文件操作完成复杂的文件处理工作。

二、 实验题目

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 file2 #include main(int argc, 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 ./mycp infile outfile

流文件的实验程序请参考该程序完成。

//系统调用

上述函数中nbytes, size和nitems都取值为1时(即一次读写一个字节),比较系统调用和流文件两种程序的执行效率。当nbytes取4096字节,size取1字节且nitems取4096时(即一次读写4096字节),再次比较这两种程序的执行效率(文件大小>1M)。如:

创建大文件的方法之一,比如用creat 创建一个新文件,用open写打开该文件,用lseek将写指针移到很远处,写入随便一个字符。比如移动0x100000,用write写个“1”,就会得到一个1M大小的文件。也可到Linux的/usr/bin找一个1~3M左右的大的执行文件。

对于单独使用的速度较快的计算机,文件要10M~100M。

2.编写一个父子进程之间用无名管道进行数据传送的C程序。父进程逐一读出一个文件的内容,并通过管道发送给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。 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 argc, char *argv[]) {

printf(\这个是一次4096个字节的运行结果:\\n\