Linux系统编程11.管道

管道:
实现原理:内核借助环形队列机制,使用内核缓冲区实现。
特质:
1.伪文件
2.管道中的数据只能一次读取
3.数据在管道中,只能单向流动
局限性:
1.自己写,不能自己读
2.数据不可以反复读
3.半双工通信
4.血缘关系进程间可用

pipe函数: 创建、并打开管道
int pipe(int fd[2])
参数:
fd[0]:读端
fd[1]:写端
返回值:
成功:0
失败:-1
管道读写行为:
读管道:
1.管道有数据,read返回实际读到的字节数。
2.管道无数据:
(1)无写端,read返回0(类似读到文件尾)
(2)有写端,read阻塞等待
写管道:
1.无读端,异常终止。(SIGPIPE导致的)
2.无读端:
(1)管道已满,阻塞等待
(2)管道未满,返回写出的字节个数

fifo管道:可以用于无血缘关系的进程间通信。
命名管道:mkfifo
无血缘关系进程间通信:
读端:open fifo O_RDONLY
写端:open fifo O_WRONLY

文件实现进程间通信:
打开的文件是内核中的一块缓冲区。多个无血缘关系的进程,可以同时访问该文件。

上一篇:TLA+ 《Specifying Systems》翻译初稿——Section 4.0 A FIFO


下一篇:python-连续读取命名管道