实验三、进程通信(一)----------——管道及共享内存.doc

实验三、进程通信(一)----------——管道及共享内存.doc

ID:59524637

大小:327.50 KB

页数:13页

时间:2020-11-07

实验三、进程通信(一)----------——管道及共享内存.doc_第1页
实验三、进程通信(一)----------——管道及共享内存.doc_第2页
实验三、进程通信(一)----------——管道及共享内存.doc_第3页
实验三、进程通信(一)----------——管道及共享内存.doc_第4页
实验三、进程通信(一)----------——管道及共享内存.doc_第5页
资源描述:

《实验三、进程通信(一)----------——管道及共享内存.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、操作系统实验报告实验三、进程通信(一)——管道及共享内存一、实验目的1)加深对管道通信的了解2)掌握利用管道进行通信的程序设计3)了解共享内存通信的程序设计方法4)了解和熟悉Linux支持的共享存储区机制二、实验内容任务一、(1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析。(2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。任务二、(1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,

2、对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。(3)编写程序:使用系统调用shmget(),shmat(),shmdt(),shmctl(),编制程序。要求在父进程中生成一个30字节长的私有共享内存段。接下来,设置一个指向共享内存段的字符指针,将一串大写字母写入到该指针指向的存贮区。调用fork

3、()生成子进程,让子进程显示共享内存段中的内容。接着,将大写字母改成小写,子进程修改共享内存中的内容。之后,子进程将脱接共享内存段并退出。父进程在睡眠5秒后,在此显示共享内存段中的内容(此时已经是小写字母)。三、代码及运行结果分析(1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析实验代码:#includemain(){intx,fd[2];charbuf[30],s[30];pipe(fd);while((x=fork())==-1);if(x==0){close(fd[0]);printf("ChildProcess!");strcp

4、y(buf,"Thisisanexample");write(fd[1],buf,30);exit(0);}else{close(fd[1]);printf("ParentProcess!");read(fd[0],s,30);printf("%s",s);}}运行结果:分析:调用pipe(fd);创建一个管道后,接着调用fork()函数产生两个进程,首先开始执行子进程,关闭管道出口,通过管道入口向管道中写入内容。执行if语句后,进入else语句块内开始父进程,管道入口关闭,通过管道出口端从管道中读取之前写入内容,最后输出出来(1)编写程序:父进程利用管道将一字符串交给子进

5、程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。实验代码:#includemain(){intx,count,left,right,temp,fd[2],fe[2];charc,buf[30],s[30];pipe(fd);pipe(fe);printf("pleaseinputalineofchar");scanf("%s",buf);while((x=fork())==-1);if(x==0){close(fd[0]);close(fe[1]);printf("ChildProcess!");write(fd[1],b

6、uf,30);read(fe[0],buf,30);printf("%s",buf);exit(0);}else{close(fd[1]);close(fe[0]);count=0;do{read(fd[0],&c,1);s[count++]=c;}while(c!='');printf("ParentProcess!");printf("%s",s);count-=2;for(left=0,right=count;left<=count/2;left++,right--){temp=s[left];s[left]=s[right];s[right]=temp;}wri

7、te(fe[1],s,30);wait(0);}运行结果:(1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)实验代码:#include#include#include

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。