1 实现原理
内核借助环形队列机制,使用内核缓冲区实现。
2 特质
1. 伪文件
2. 管道中的数据只能一次读取。
3. 数据在管道中,只能单向流动。
3 局限性
1. 自己写,不能自己读。
2. 数据不可以反复读。
3. 半双工通信。
4. 血缘关系进程间可用。
4 使用
int pipe(int fd[2]);
参数: fd[0]: 读端,fd[1]: 写端。
返回值: 成功: 0
失败: -1 errno
实现时应该先创建管道,后fork进程。
其pipe函数会创建管道的两个方向的文件,但是需要控制其方向只能为单向,需要关闭一定的文件描述符才能够执行。虽然是单向的操作,但是其可以一个读端,多个写端,或者多个读端,一个写端。
其次,对于管道为我们打开的文件,可以直接使用文件操作,read,write函数进行操作。
5 读写管道操作
读管道:
1. 管道有数据,read返回实际读到的字节数。
2. 管道无数据:
1)无写端,read返回0 (类似读到文件尾)
2)有写端,read阻塞等待。
写管道:
1. 无读端, 异常终止。 (SIGPIPE导致的)
2. 有读端:
1) 管道已满, 阻塞等待
2) 管道未满, 返回写出的字节个数。