操作系统原理A实验报告学生姓名:陶浩学号:1708090122班级:惠普测试171实验5进程的管道通信实验实验指导教师:葛艳5进程的管道通信实验一、实验目的1.了解管道通信机制的基本原理。2.理解无名管道的通信原理及使用方法。3.掌握父子进程使用无名管道通信的方法。二、实验内容1.编译运行pipe1.c,把程序运行结果截图,分析程序的执行过程。2.编译运行pipe2.c,把程序运行结果截图,分析程序的执行过程。3.编写程序实现多个进程基于无名管道进行通信。用系统调用pipe()建立一无名管道,两个子进程P1和P2分别向管道写入一句话(包含自己的姓名)。父进程等待子进程结束后,从无名管道中读出两个来自子进程的信息并显示,子进程发送先后顺序没有要求。三、实验步骤及运行结果分析1.编译运行pipe1.c,把程序运行结果截图,分析程序的执行过程。分析:pipe(fd)创建一个无名管道,fork()用于创建一个子进程,基于管道的通信一般都是先创建管道后创建进程。程序运行到if判断语句,p当前为子进程的进程号且大于0,进入elsewait()常用来控制父进程与子进程的同步,在父进程中调用wait()则父进程被阻塞,进入等待队列,等待子进程结束,子进程运行到sprintf将字符串存储到字符数组中之后对管道的写入端口加锁解锁,并把字符串数组的内容写入到管道的写入口。当子进程结束时,父进程从wait()返回继续执行原来的程序。之后运行到对管道的读入端加锁,从管道的读入口读出信息放入到inpipe中,输出inpipe.2.编译运行pipe2.c,把程序运行结果截图,分析程序的执行过程。分析:父进程先创建管道,再创建两个子进程。第一个子进程把从键盘接收到的信息写入无名管道,当从键盘接收到首字母为“a”的信息时结束。第二个子进程从无名管道中读取数据,当从无名管道中读出的首字母为“a”的信息时结束。父进程利用wait(0),等待两个字进程运行结束后,输出parentiskill退出程序。3.编写程序实现多个进程基于无名管道进行通信。用系统调用pipe()建立一无名管道,两个子进程P1和P2分别向管道写入一句话(包含自己的姓名)。父进程等待子进程结束后,从无名管道中读出两个来自子进程的信息并显示,子进程发送先后顺序没有要求。