资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
计算机操作系统计算机操作系统实验报告实验报告实验题目进程的管道通信实验一、实验目的1、了解什么是管道 2、熟悉 UNIX/LINUX 支持的管道通信方式 3、通过进程多次的循环读写学习利用管道进行进程间的通信 4、验证 lockf 的加锁解锁作用5、验证读写进程本身是否已经实现了互斥作用三、实验过程编写程序实现进程的管道通信。用系统调用 pipe( )建立一管道,二个子进程 P1 和 P2 分别 向管道各写一句话:Child P1 is sending a message!Child P2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收 P1,后 P2) 。 延迟 5 秒后显示 child 1 process is sending message!再延迟 5 秒child 2 process is sending message! 并实现循环 5 次读写 程序如下:程序如下:#include int pid1, pid2, i=0; int main( ) int fd2; char OutPipe100,InPipe100; pipe(fd);while(pid1 = fork() = -1); if(pid1 = 0) printf(“nChild1n“); lockf(fd1, 1, 0);int i;for(i=0;i5;i+)sprintf(OutPipe, “n Child process %d is sending message!n“,i);write(fd1, OutPipe, 50);sleep(5);lockf(fd1, 0, 0);exit(0); else while(pid2 = fork() = -1);if(pid2 = 0)printf(“nChild2n“);lockf(fd1, 1, 0);int j;for(j=0;j5;j+)sprintf(OutPipe, “n Child process %d is sending message!n“,j);write(fd1, OutPipe, 50);sleep(5);lockf(fd1, 0, 0);exit(0); else printf(“nFather1n“);int p;for(p=0;p5;p+)read(fd0, InPipe, 50); printf(“%sn“, InPipe); printf(“nFather2n“);int q;for(q=0;q5;q+)read(fd0, InPipe, 50); printf(“%sn“, InPipe); exit(0); return 0; 分析与体会: 1、通过本实验,我了解到所谓管道,是指能够连接一个写进程和一个读进程、并允许它们以生 产者消费者方式进行通信的一个共享文件,又称为 pipe 文件。由写进程从管道的写入端(句柄 1)将数据写入管道,而读进程则从管道的读出端(句柄 0)读出数据。并知道 pipe 文件的建立。 2、熟悉 UNIX/LINUX 支持的管道通信方式,并在程序中运用了 pipe() ,read()和 write() 等系统调用。 3、验证了 lockf 的加锁解锁作用,并验证了读写进程互斥。 4、进程中 sleep(5)的作用是让所显示的内容休眠 5 秒钟,即等待 5 秒钟再显示。进程 1 和进 程 2 也能对管道进行操作,因为他们同属于共同的管道,共同共享资源。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号