操作系统实验四

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

贵州大学实验报告学院:计算机科学与技术专业:信息安全班级:121姓名饶永明学号1208060066实验组实验时间11.11指导教师王道书成绩实验项目名称实验四进程的管道通信实验目的1、了解什么是管道2、熟悉UNIX/LINUX支持的管道通信方式实验要求在ubuntu下编写、运行程序并对结果进行分析、总结。实验内容编写程序实现进程的管道通信。用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage!父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,后P2)。实验数据试验程序:#includeunistd.h#includesignal.h#includestdio.hintpid1,pid2;main(){intfd[2];charoutpipe[100],inpipe[100];pipe(fd);/*创建一个管道*/while((pid1=fork())==-1);if(pid1==0){lockf(fd[1],1,0);//加锁锁定写入端sprintf(outpipe,child1processissendingmessage!);/*把串放入数组outpipe中*/write(fd[1],outpipe,50);/*向管道写长为50字节的串*/sleep(5);/*自我阻塞5秒*/lockf(fd[1],0,0);//释放管道写入端exit(0);}else//············(1){while((pid2=fork())==-1);if(pid2==0)//··············(2){lockf(fd[1],1,0);/*互斥*/sprintf(outpipe,child2processissendingmessage!);write(fd[1],outpipe,50);sleep(5);lockf(fd[1],0,0);exit(0);}Else//················(3){wait(0);/*同步*/read(fd[0],inpipe,50);/*从管道中读长为50字节的串*/printf(%s\n,inpipe);wait(0);read(fd[0],inpipe,50);printf(%s\n,inpipe);exit(0);}}}程序运行结果:实验分析:根据对程序进行gdb调试,可知道程序流程大致如下:首先先创建了一个管道,接着用fork()创建一个与父进程并行的子进程,由程序运行结果图可知:结果一是父进程先运行,子进程后运行;而结果二相反。我以结果一为例:第一层父进程:接下来父进程开始执行标号为(1)的else{}语句,接下来父进程又创建了一个并行的第二层子进程和父进程,接着第二层父进程进入标号为(3)的else{}语句后遇到wait(0)后停止运行等待子进程执行,第二层子进程进入标号为(2)的if{}语句:锁定管道并向管道中写入child2processissendingmessage!字符串,接着等待5秒让第二层父进程执行,第二层父进程从管道中读取字符串并输出,所以在终端等了5秒后输出了结果一的第一句字符串,接着再返回第二层子进程,第二层子进程解锁管道并退出。第一层子进程:第一层子进程进入if(pid2==0){}语句,锁定管道并向管道中输入字符串child1processissendingmessage!,接着等待5秒让第一层父进程从管道中读取字符串并输出,所以在终端中等了第二个五秒后输出了结果一的第二句字符串,接着再返回第一层子进程,第一层子进程解锁管道并退出。实验总结此次实验让我知道了管道的运行机制,管道是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接收管道输出的接受进程(即读进程),则从管道中接收数据。当然,也让我对fork()的运用有了更深入地了解。思考题1、程序中的sleep(5)起什么作用?答:让子进程沉睡5s,使父进程执行2、子进程1和2为什么也能对管道进行操作?答:利用pipe()建立起来的无名文件(无路径名)。只用该系统调用所返回的文件描述符来标识该文件,故只有调用pipe()的进程及其子孙进程才能识别此文件描述符,才能利用该文件(管道)进行通信。当这些进程不再使用此管道时,核心收回其索引结点。因为父进程用pipe()创建了一个无名管道,子进程1和2都知道该管道文件描述符,所以进程1和2都能对管道进行操作。指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功