进程间通信---管道

为什么进程间需要通信?
1、数据传输
     一个进程需要将它的数据发送给另一个进程。
2、资源共享
     多个进程之间共享同样的资源。
3、通知事件
     一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。
4、进程控制
     有些进程希望完全控制另一个进程的执行(如 Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。
*******************************************************************************************************************
进程间通信的数据交换发生在操作系统在内核中开辟的一块缓冲区。所以在读写过程中会发生两次数据的拷贝(写端在写完数据后,需要把数据拷贝到内核区;读端在读数据时,需要从内核区把数据拷贝到读端,才能读)

管道是一个文件,是用环形队列实现的,管道通信适用于父子进程(有血缘关系的)

*******************************************************************************************************************
一、管道的创建  
      
      返回值:成功返回0,失败返回-1。
*******************************************************************************************************************
二、管道通信的过程:
     (1)父进程调用 pipe 开辟管道,得到两个文件描述符指向管道的两端;
     (2)父进程调用 fork 创建子进程,子进程也会有两个文件描述符(继承父进程的文件描述符)指向同一管道;
     (3)两个进程一个关闭读端,一个关闭写端,这样就可以保证一个进程往管道里写,另一个进程从管道里读。
*******************************************************************************************************************
二、使用管道的限制
     (1)管道只能实现单项通信
*******************************************************************************************************************
三、使用管道,应注意
     (1)如果所有指向管道 写端的文件描述符 都关闭 (管道写端的引用计数等于 0), 仍然有进程 从管道的读端读数据 ,那么管道中 剩余的数据都被读取 ,再次read会返回 0, 就像读到文件末尾一样。
     
     (2)如果有指向管道 写端的文件描述符 没关闭(管道写端的引用计数大于 0), 持有管道写端的 进程也没有向管道中写数据 ,这时有进程从管道读端读数据 ,那么 管道中剩余的数
据都被读取后,再次read会阻塞 ,直到管道中有数据可读了才读取数据并返回。

     (3)如果所有指向管道 读端的文件描述符都关闭 (管道读端的引用计数等于 0),这时有进程向管道的写端 write,那么该进程会收到信号SIGPIPE,通常会导致进程异常终止

     (4)如果有指向管道 读端的文件描述符 没关闭(管道读端的引用计数大于 0),而持有管道读端的 进程也 没有从管道中读数据 ,这时有 进程向管道写端写数据 ,那么在管道被写满时再 次write 会阻塞,直到管道中有空位置了才写入数据并返回。
 *******************************************************************************************************************

四、用管道实现进程间通信
 
      
      
          
         

         
          
     
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值