IPC 进程间通讯方式——管道
进程间通讯概述
- 数据传输:一个进程须要将它的数据发送给另外一个进程,发送的数据量在一个字节到几兆字节之间
- 共享数据:多个进程想要操做共享数据,一个进程对共享数据的修改,别的进程应该马上看到。
- 通知时间:一个进程须要向另外一个或一组进程发送消息,通知他们发生了某些事件(如进程终止时要通知父进程)
- 资源共享:多个进程之间共享一样的资源,为了作到这一点,须要内核提供锁和同步机制
- 进程控制:有些进程但愿彻底控制另外一个进程的执行(如Debug进程),此时控制进程但愿可以拦截另外一个进程的全部陷入的异常,并可以及时指导它的状态改变。
进程间通讯方式
- 管道(pipe),有名管道(FIFO)
- 信号(signal)
- 消息队列
- 共享内存
- 信号量
- 套接字(socket)
管道
- 管道针对本地计算机的两个进程之间的通讯而设计的通讯方式,管道创建后,实际得到两个文件描述符:一个用于读取另外一个用于写入。
- 常见的IPC机制,经过pipe系统调用。
- 管道单工,数据只能向一个方向流动。双向通讯时,须要创建两个管道。
- 数据的读出和写入:一个进程向管道中写的内容被管道另外一端的进程读出。写入的内容每次都添加在管道的缓冲区的尾部,每次都是从缓冲区的头部读出数据。
管道的分类
- 匿名管道
- 关系进程,父子或兄弟
- 由pipe系统调用,管道由父进程创建
- 管道位于内核空间,实际上是一块缓存
- 有名管道(FIFO)
- 两个没有任何关系的进程之间通讯可经过有名管道进行数据传输
- 经过系统调用mkfifo建立
管道建立
#include<unistd.h>
int pipe(int fd[2]);
//返回:0成功,-1出错
- 两个文件描述符数组
- fd[0]:pipe的读端
- fd[1]:pipe的写端
欢迎关注本站公众号,获取更多信息