管道概念
管道是最基础简单的ipc通信机制,用于有亲缘关系的进程之间的相互通信。
管道特点
- 其本质是一个伪文件(实为内核缓冲区)
- 由两个文件描述符引用,一个表示读端,一个表示写端。
- 规定数据从管道的写端流入管道,从读端流出。
- 数据一旦被读走,便不在管道中存在,不可反复读取。
- 由于管道采用半双工通信方式。因此,数据只能在一个方向上流动。
- 只能在有公共祖先的进程间使用管道。
与管道相关的函数
类型 | 创建/打开 | 关闭 | 读 | 写 |
---|---|---|---|---|
单工 | popen() | pclose | read() | write() |
半双工 | pipe()/open() | close() | read() | write() |
FIFO半双工 | mkfifo()/open | close()/unlink() | read() | write() |
全双工 | socketpair() | close() | read() | write() |
tips:
1对管道的操作默认是阻塞的
2操作管道的进程销毁之后,管道会自动释放。
3管道的实现方式是消息队列,逻辑上的环形队列。
管道通信实例
利用管道实现父子通信,子进程往管道写东西,父进程读取管道里面的东西。