欢迎来到天天文库
浏览记录
ID:47404460
大小:1.35 MB
页数:17页
时间:2020-01-10
《实验二,进程通信,管道共享内存》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、........操作系统实验报告实验二:进程通信(一)——管道及共享内存一、实验目的·了解进程之中相互通信的方式·加深对管道通信的了解·了解共享内存通信的程序设计方法·了解和熟悉Linux支持的共享存储区机制二、实验内容和步骤任务一、(1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析。(2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串任务二、1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区
2、的情况,再次执行该程序,再用ipcs.专业学习资料.........命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。(3)编写程序:使用系统调用shmget(),shmat(),shmdt(),shmctl(
3、),编制程序。要求在父进程中生成一个30字节长的私有共享内存段。接下来,设置一个指向共享内存段的字符指针,将一串大写字母写入到该指针指向的存贮区。调用fork()生成子进程,让子进程共享内存段中的内容。接着,将大写字母改成小写,子进显示程修改共享内存中的内容。之后,子进程将脱接共享内存段并退出。父进程在睡眠5秒后,在此显示共享内存段中的内容(此时已经是小写字母)。一、代码及运行结果分析1.任务1(1)①代码:#include#include#include#inc
4、lude#include.专业学习资料.........#includeintmain(){intx,fd[2];charbuf[30],s[30];pipe(fd);while((x=fork())==-1);if(x==0){close(fd[0]);printf("ChildProcess!");strcpy(buf,"Thisisanexample");write(fd[1],buf,30);exit(0);}else{close(fd[1]);p
5、rintf("ParentProcess!");read(fd[0],s,30);printf("%s",s);}}②截图:.专业学习资料.........③结果和分析:创建一个管道,调用fork()函数产生两个进程,我的系统优先先执行父进程,比较疑惑,既然这样,管道中并没有数据是如何得出最后结果的,后来百度了一下解释说是因为管道本身是一种同步机制,并且printf执行的时间要比其他程序时间长得多,才会这样。然后执行子程序,将数据写入管道,然后父程序打印出来2.任务1(2)①代码:#include#i
6、nclude#include#include#include.专业学习资料.........#includevoidfanzhuan(char*s){char*p=s+strlen(s)-1;chartemp;while(s7、example");pipe(fd);write(fd[1],buf,20);while((x=fork())==-1);if(x==0){printf("ChildProcess!");read(fd[0],s,20);.专业学习资料.........//printf("%s",s);fanzhuan(s);write(fd[1],s,20);exit(0);}else{wait(NULL);close(fd[1]);printf("ParentProcess!");read(fd[0],m,20);prin8、tf("%s",m);}}②截图:.专业学习资料.........3.任务2(1)①代码:#include#include#include#include#include
7、example");pipe(fd);write(fd[1],buf,20);while((x=fork())==-1);if(x==0){printf("ChildProcess!");read(fd[0],s,20);.专业学习资料.........//printf("%s",s);fanzhuan(s);write(fd[1],s,20);exit(0);}else{wait(NULL);close(fd[1]);printf("ParentProcess!");read(fd[0],m,20);prin
8、tf("%s",m);}}②截图:.专业学习资料.........3.任务2(1)①代码:#include#include#include#include#include
此文档下载收益归作者所有