ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:282.03KB ,
资源ID:6488771      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6488771.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验三.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验三.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下的二进制执行文件。调用格式例如:copy fil

2、e1 file2#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时(即一次读写一个字节),比较系统调用和流文件两种程序的执行效率。当n

3、bytes取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(

5、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(str);lseek(inputFd, 0, 0);while

6、(n=read(inputFd, buf, BUFSIZE)0) write(outputFd,buf, n);close(inputFd);close(outputFd);return 0;以下为输出结果:xcubuntu:$ time ./copy InputData OutputData这个是一次一个字节的运行结果:real 0m1.597suser 0m0.064ssys 0m1.500slxcubuntu:$ gcc CopyFile.c -o copylxcubuntu:$ time ./copy InputData OutputData这个是一次4096个字节的运行结果:real

7、 0m0.002suser 0m0.000ssys 0m0.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(B

8、UF, BUF_SIZE, 1, outputFp); fgetc(inputFp); fclose(inputFp); fclose(outputFp);以下为输出结果lxcubuntu:$ gcc CopyFileV2.c -o copylxcubuntu:$ time ./copy InputData OutPutData这个是一次读取4096个字节real 0m0.004suser 0m0.000ssys 0m0.000slxcubuntu:$ gcc CopyFileV2.c -o copylxcubuntu:$ time ./copy InputData OutPutData这个是

9、一次读取1个字节real 0m0.038suser 0m0.032ssys 0m0.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(Inpu

10、tData, O_RDONLY, 0644); dfd = open(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); else close(chan1); read(chan0, buff, BUFF_SIZE); write(dfd, buff, strlen(buff); close(chan0); close(sfd); cl

11、ose(dfd); return 0;以下为输出结果:3、在两个用户的独立程序之间,使用有名管道,重新编写一个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(In

12、putData.txt,O_RDONLY); while(n=read(inputDataFd, buf, 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); outputDa

13、taFd = open(OutputData.txt, O_CREAT|O_WRONLY, 0644); while(n = 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)假定当前目录中没有l

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

15、习df,du,tar命令。4.上机练习ps,time,nohub命令。5.上机练习compress,gzip和man等命令。三、实验结果(一)上机练习ls,ln,ln s,file,chown,chmode,head,taill,find等命令。1)假定当前目录中没有ls.save文件,先后键入ls l和ls l ls.save两个命令。请将第一个ls命令的输出和第二个命令的输出文件ls.save中的内容作仔细比较。两者有何不同?并加以解释。 ln:创建软连接;chown: 更改某个文件或目录的所有者,如:chownchmod: 设置文件或目录的默认权限的命令,如:chmod a+x a.sh

16、head: 用head命令只显示文件或标准输入的头几行,如:head n 2 test.txt taill: 用户想查看文件的尾部,如:tail n 2 test.txtfind:查找文件,如:find /etc iname passwd ls l的结果lxcubuntu:/Source Code$ ls -l总用量 24-rw-rw-r- 1 lxc lxc 581 5月 21 19:27 CopyFile.c-rw-rw-r- 1 lxc lxc 398 5月 21 18:52 CopyFile.c-rw-rw-r- 1 lxc lxc 411 5月 21 20:23 CopyFileV2

17、.c-rw-rw-r- 1 lxc lxc 370 5月 19 22:50 read.c-rw-rw-r- 1 lxc lxc 570 5月 21 20:51 UnnamedPipe.c-rw-rw-r- 1 lxc lxc 440 5月 19 22:43 write.cls l ls.save的结果总用量 24-rw-rw-r- 1 lxc lxc 581 5月 21 19:27 CopyFile.c-rw-rw-r- 1 lxc lxc 398 5月 21 18:52 CopyFile.c-rw-rw-r- 1 lxc lxc 411 5月 21 20:23 CopyFileV2.c-rw

18、-rw-r- 1 lxc lxc 0 5月 21 21:36 ls.save-rw-rw-r- 1 lxc lxc 370 5月 19 22:50 read.c-rw-rw-r- 1 lxc lxc 570 5月 21 20:51 UnnamedPipe.c-rw-rw-r- 1 lxc lxc 440 5月 19 22:43 write.cls lls.save的结果多了一个空文件ls.save。ls.save是输出重定向。1)比较ls,ls *,ls .,ls .* ,ls .?* 这些命令的输出有何不同?2)以下两条命令:mv file1 file2cp file1 file2;rm f

19、ile1的执行效果是否总是相同的?请仔细推敲并上机验证(提示:如是软连接如何)答:一样,mv file1 file2的功能是把file1文件名更改成file2,cp file1 file2;rm file1的功能是先复制文件然后删除源文件。软连接的功能也一样。3)在当前的目录树中显示当天修改的C源程序名。答:find . -name *.c -mtime -24(二)掌握正则表达式的匹配规则,上机练习grep、awk命令。1)按相反的次序显示输入行及行号。lxcubuntu:$ grep -n a Test|sort -r6:a5:ab4:abc3:abcd2:abcde1:abcdef2)统

20、计输入单词的频度。lxcubuntu:$ awk for(i=1;i=NF;i+)a$i+ENDfor(i in a) print i=ai Testab=2abcdef=1abc=2a=1abcd=1abcde=1(三)上机练习df,du,tar命令。df:显示指定磁盘文件的可用空间du:统计目录(或文件)所占磁盘空间的大小。tar:解压或压缩文件。解压:tar zxvf,压缩:tar cvf filename.tar filename(四)上机练习ps,time,nohub命令。ps:列出系统中当前运行的那些进程time:用于测量一个命令的运行时常 nohop:切换到后台执行 (五)上机练

21、习man命令。帮助文档lxcubuntu:$ man lslxcubuntu:$ man ascii软件开发工具(一)实验目的熟悉和掌握unix主要的软件开发工具 ar,make, (SCCS,可选)的使用。重点是make。(二)实验题目课本习题11 (p 338)(3)、(4)(三)实验结果练习3 主程序lxcubuntu:$ gcc -c FileA.clxcubuntu:$ gcc -c FileB.clxcubuntu:$ ar rv libfile.a FileA-B.oar: 正在创建 libfile.aa - FileA.oa - FileB.olxcubuntu:$ ar tv

22、 libfile.arw-rw-r- 1000/1000 1044 May 22 10:29 2016 FileA.orw-rw-r- 1000/1000 1048 May 22 10:29 2016 FileB.olxcubuntu:$ ar x libfile.a FileA.o练习3实验截图题目4 主程序HEADER = netdefs.hOBJECT = subnet.o service.onetwork:$(OBJECT) cc -o network $(OBJECT)subnet.o service.o:$(HEADER)clean: rm network $(OBJECT) 练习4 运行截图

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1