实验四进程间管道通信_第1页
实验四进程间管道通信_第2页
实验四进程间管道通信_第3页
实验四进程间管道通信_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验四进程间管道通信实验目的 :使用使用系统调用 pipe( )、close( )、 write( )及 read( )来编写一个父子进程通 过管道传递信息的程序。实验内容 :进程的管道通信是UNIX系统中的一种通信方式,提供有名管道和无名管道 两种数据通信方式,这里主要是采用无名管道通信。无名管道为建立管道的进程及其子孙进程提供一条以比特流方式传送消息 的通信管道。该管道在逻辑上被看作管道文件,在物理上则由文件系统的高速 缓冲区构成,而很少启动外设。发送进程利用文件系统的系统调用 write(fd1,buf,size),把buf中的长度为size字符的消息送入管道入口 fd1,接收 进程则使

2、用系统调用read(fdO,buf,size)从管道出口 fd0读出size字符的消息置 入buf中。这里,管道按FIFO(先进先出)方式传送消息,且只能单向传送。利用unix系统提供的系统调用pipe,可以建立一条同步的通信管道。其格式 为:pipe(fd)intfd2这里,fd1为写入端,fd0为读出端。参考程序:用C语言编写一个程序,建立一个pipe,同时父进程生成一个子进程,子进程向 pipe 中写入一个字符串,父进程从 pipe 中读出该字符串。/s4-3-1.c#includemain()int x,fd2;char buf30,s30;pipe(fd);/* 创建管道 */whi

3、le(x=fork()=-1);/* 创建子进程失败时,循环 */if(x=0)sprintf(buf,this is an examplen);write(fd1,buf,30);/* 把 buf 中字符写入管道 */exit(0);else/* 父进程返回 */wait(0);read(fd0,s,30);/* 父进程读管道中字符 */printf(%s,s);编写一个程序,建立一个管道。同时,父进程生成子进程p1,p2,这两个子进程分别向管道中写入各自的字符串,父进程读出它们。/s4-3-2.c#include main()int r,p1,p2,fd2;char buf50,s50;p

4、ipe(fd);/* 父进程建立管道 */while(p仁fork()=-1); /*创建子进程p1,失败时循环*/ if(p1=0)lockf(fd1,1,0);sprintf(buf,child process P1 is sending messages!n);printf(child processP1!n);write(fd1,buf,50);/*把buf中的50个字符写入管道*/sleep(5);/*睡眠5秒,让父进程读*/lockf(fd1,0,0);/* 释放管道写入端 */exit(0);/* 关闭 p1*/else/*从父进程返回*/while(p2=fork()=-1);

5、/*创建子进程p2,失败时循环*/ if(p2=0)/*从子进程p2返回,执行p2*/lockf(fd1,1,0);/* 锁定写入端 */sprintf(buf,child process P2 is sending messagen);printf(child process P2!n);write(fd1,buf,50);/* 把 buf 中字符写入管道 */sleep(3);/* 睡眠等待 */lockf(fd1,0,0);/* 释放管道写入端 */exit(0);/* 关闭 P2*/wait(0);if(r=read(fd0,s,50)=-1)printf(cant read pipe

6、n);else printf(%sn,s);wait(0);if(r=read(fd0,s,50)=-1)printf(cant read pipen);else printf(%sn,s);exit(0);sleep 为保证当前进程睡其中, lockf 为保证进程互斥使用管道的系统调用, 眠,转让处理机的系统调用。执行的结果为:child process P1!child process P1 is sending message!(等待 5 秒钟)child process P2!child process P2 is sending message!结果分析:该程序使用了系统调用PIPE ()建立一条管道线。然后通过两个子进程P1和P2分别向管道各写一句话,分别是“child 1 is sending message! ”“child 2issending message! 而”父.进程则从管道中读出来自于两个进程的信息,通过 PRINTF语句显示在屏幕上。心得体会:通过本学期的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论