进程间通信的方式,特征
- 管道:简单
- 信号: 开销小
- map映射:非血缘关系进程间
- (本地套接字)socket:稳定
管道
实现原理:
内核借助环形队列机制,使用内核缓冲区实现
特征:
- 伪文件
- 管道中的数据只能一次读取
- 数据在管道中这能单向流动
局限性:
- 自己写,不能自己读
- 数据不能反复读取
- 半双工通信
- 非血缘关系进程间不可用
pipe函数:
int pipe(int fd[2])
作用:创建,打开管道
参数:
fd[0]: 读段
fd[1]: 写段
返回值:
成功,返回0
失败,返回-1设置errno
管道的读写行为
读数据:
- 管道有数据,read返回读到的字节数
- 管道无数据,
- 无写段,read返回0
- 有写段,read阻塞等待
写数据:
- 无读段,异常终止。(SIGPIPE)
- 有读段,
- 管道已满,write阻塞等待
- 管道未满,返回写到的字节数
fifo管道
命名管道:mkfifo
无血缘关系进程间通信