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
文件实现进程间通信:
打开的文件是内核中的一块缓冲区。多个无血缘关系的进程,可以同时访问该文件。
标签:11,read,编程,血缘关系,间通信,管道,fd,fifo,Linux 来源: https://blog.csdn.net/qq_42027408/article/details/104758384