操作系统-实验三_第1页
操作系统-实验三_第2页
操作系统-实验三_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验三文件系统的用户界面一、 实验目的进一步理解、使用和掌握文件的系统调用、文件的标准子例程,能利用和选择这些基本的文件操作完成复杂的文件处理工作。二、 实验题目C read(fd, buf, nbytes),write(fdbuf,nbytes)fread(buf,sizenitems,fp),fwrite(buf, sizenitems,fp),编写一个文件的复制程序(文件大小1MC 程序来生成,或使用/usr/bin 下的二进制执行文件。调用格式例如: copy file1 file2 #include main(int argc, char*argv)fd1=open(argv

2、1,O_RDONLY);/creat (argv2,0660);fd2=open(argv2, O_WRONLY); while(n=read(fd1, buf, BUFSIZE)0)write(fd2, buf, n);main 带参的调用方法例(含测试时间):time./mycpinfileoutfile流文件的实验程序请参考该程序完成。nbytes, size nitems 1 nbytes 4096 字节,size 1 字nitems 4096 4096 率(文件大小1M)。如:creat open 写打开该文lseek 将写指针移到很远处,写入随便一个字符。比方移动0 x100000

3、e 写个1M x 的n 1 3M 左右的大的执行文件。对于单独使用的速度较快的电脑,文件要 10M100M。编写一个父子进程之间用无名管道进行数据传送的C 在两个用户的独立程序之间,使用有名管道,重新编写一个C 程序,实现题2 的功能。三、 源代码1编写一个文件复制的 C 语言程序:分别使用文件的系统调用 read(fd, nbytes), write(fdbuf, nbytes)fread(buf, sizenitems, fp), fwrite(buf, sizenitems, fp),编写一个文件的复制程序。程序一#define BUFSIZE 4096 #include #includ

4、e #include #include int main(int 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

5、(str); lseek(inputFd, 0, 0);while(n=read(inputFd, buf, BUFSIZE)0) write(outputFd,buf, n);close(inputFd);close(outputFd); return 0;以下为输出结果:xcubuntu:$ time ./copy InputData OutputData这个是一次一个字节的运行结果realuser syslxcubuntu:$ gcc CopyFile.c -o copy lxcubuntu:$ time ./copy InputData OutputData 这个是一次 4096 个字

6、节的运行结果:realuser syslxcubuntu:$程序二#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, outputFp); f

7、getc(inputFp);fclose(inputFp); fclose(outputFp);以下为输出结果lxcubuntu:$ gcc CopyFileV2.c -o copy lxcubuntu:$ time ./copy InputData OutPutData 这个是一次读取 4096 个字节realuser syslxcubuntu:$ gcc CopyFileV2.c -o copy lxcubuntu:$ time ./copy InputData OutPutData 这个是一次读取 1 个字节realuser syslxcubuntu:$2C一个文件的内容,并通过管道发送

8、给子进程。子进程从管道中读出信息,再将其写入一个新的文件。程序结束后,对原文件和新文件的内容进行比较。程序#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(OutputData, O_WRONLY|O_CREAT|O_TRUNC, 0644); pipe(chan);if(fork()close(chan

9、0);while(n = read(sfd, buff, BUFF_SIZE)0)write(chan1, buff, n);close(chan1);close(chan1);read(chan0, buff,BUFF_SIZE); write(dfd, buff, strlen(buff); close(chan0);close(sfd); close(dfd); return 0;以下为输出结果:3、在两个用户的独立程序之间,使用有名管道,重新编写一个C 程序,实现题2 的功能。程序:写管道端#define BUFSIZE 256 #include #include #include #

10、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, BUFSIZE)0)write(writeFifoFd,buf,n); close(inputDataFd); close(writeFi

11、foFd);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, 0644); while(n = read(readFifoFd, buf, sizeof(buf)!=0)write(outputDataFd,buf,n); close(readFifoFd);

12、 close(outputDataFd);return 0;运行结果Unix实用程序一、实验目的Unix shell 命令,正则表达式和过滤器程序的使用。二、实验题目,file,chown,chmode,head,taill,find等命令。lsl 和两个命令。请将第一个ls 有何不同?并加以解释。比较ls,ls* ,ls.,ls.*,ls.?*这些命令的输出有何不同?以下两条命令:mvfile1file2cpfile1file2;rmfile1的执行效果是否总是相同的?请仔细推敲并上机验证提示:如是软连接如何。c 源程序名。grep、awk 命令。按相反的次序显示输入行及行号。统计输入单词的

13、频度。df,du,tar 命令。ps,time,nohub 命令。compress,gzip man 等命令。三、实验结果(一)上机练习 ls,ln,ln s,file,chown,chmode,head,taill,find等命令。lsl 和两个命令。请将第一个ls 命令的输出和第二个命令的输出文件中的内容作仔细比较。两者有何不同?并加以解释。ln:创建软连接;chown: 更改某个文件或目录的所有者,如:chown chmod: 设置文件或目录的默认权限的命令,如:head: head n 2 test.txttaill: 用户想查看文件的尾部,如:tail n 2 test.txtfin

14、d:查找文件,如:find/etcinamepasswd-rw-rw-r- 1 lxc lxc 581-rw-rw-r- 1 lxc lxc 5815 月-rw-rw-r- 1 lxc lxc 3985 月 21 18:52 CopyFile.c-rw-rw-r- 1 lxc lxc 4115 月-rw-rw-r- 1 lxc lxc 3705 月-rw-rw-r- 1 lxc lxc 5705 月-rw-rw-r- 1 lxc lxc 4405 月ls l 的结果总用量 24-rw-rw-r- 1 lxc lxc 5815 月-rw-rw-r- 1 lxc lxc 3985 月 21 18:

15、52 CopyFile.c-rw-rw-r- 1 lxc lxc 4115 月-rw-rw-r- 1lxclxc05 月-rw-rw-r- 1 lxc lxc 3705 月-rw-rw-r- 1 lxc lxc 5705 月-rw-rw-r- 1 lxc lxc 4405 月ls 的结果多了一个空文件 e。e 是输出重定向。比较ls,ls* ,ls.,ls.*,ls.?*这些命令的输出有何不同?以下两条命令:mvfile1file2cpfile1file2;rmfile1 推敲并上机验证提示:如是软连接如何答:一样,mvfile1file2 的功能是把file1 文件名更改成file2,cpf

16、ile1file2;rmfile1 软连接的功能也一样。C 源程序名。答:find. -name*.c -mtime -24(二)掌握正则表达式的匹配规则,上机练习、awk 命令。按相反的次序显示输入行及行号。lxcubuntu:$ grep -n a Test|sort-r 6:a5:ab4:abc 3:abcd 2:abcde 1:abcdef统计输入单词的频度。lxcubuntu:$awkfor(i=1;i=NF;i+)a$i+ENDfor(iinprint i=aiTestab=2 abcdef=1 abc=2 a=1 abcd=1 abcde=1(三)上机练习 df,du,tar 命令。df:显示指定磁盘文件的可用空间 dutar:解压或压缩文件。解压:tar zxvf,压缩:tar cvf filename.tar filename(四)上机练习 ps,time,nohub 命令。ps:列出系统中当前运行的那些进程time:用于测量一个命令的运行时常nohop:切换到后台执行(五)上机练习 man 命令。帮助文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论