1. 原理
- Pipe 是字节流。
- Pipe 是半双工 (half duplex) 的,即字节流的方向是单向的。尽管一些操作系统也提供全双工 (full duplex) pipe,但为了可移植性,应当假设 pipe 支持单向信息流。
- Pipe 信息之所以可以被不同进程共享,是因为信息存储在 kernel 里。
2. 使用方法
2.1. C 语言编程
#include <unistd.h>
int pipe(int filedes[2]); // Returns 0 on success, or –1 on error
2.2. 命令行
命令行中常用管道,即 |
,连接两个进程的输入和输出。下图展示了ls | wc -l
命令的工作原理。
3. 用途:进程间通信 (Inter Process Communication, IPC)
Pipe 只能在有 公共祖先
的进程间共享信息,通常用法是父进程创建 pipe 并调用 fork 创建子进程,从而实现通过 pipe 共享信息
避免同时写同一个 pipe
如果父进程通过 pipe 向子进程发送数据,一般会关闭父进程的 read descriptor 和子进程的 write descriptor 以保证信息流的单向性。
如果需要双向通信 (bidirectional communication),一般会使用两个 pipe 负责不同方向的通信。
4. 参考资料
- The Linux Programming Interface
- The Unix Programming Environment