进程间通信 IPC
Linux 主流 IPC:
管道、信号量、共享内存、消息队列、套接字
管道(Pipe)
1. 管道通用特点
-
半双工(单向):数据只能一个方向流动
-
面向字节流
-
内置同步互斥机制
-
命令行
|就是无名管道
2. 无名管道(pipe)
-
创建:
int pipe(int fd[2]) -
特点
-
没有名字,只能通过文件描述符使用
-
只能用于亲缘进程(父子 / 兄弟)
-
随进程销毁而消失
-
fd [0] 读端,fd [1] 写端
-
3. 有名管道(FIFO)
-
创建命令:
mkfifo 管道名 -
特点(必背)
-
有文件名,存在于文件系统
-
可用于任意进程(无亲缘关系也可)
-
关闭进程后,管道文件依然存在
-
-
使用:
open → read/write → close
管道读写规则
-
读端不存在:写端收到 SIGPIPE 信号,默认终止进程
-
读端有缓存:写满则阻塞
-
写端不存在:读端读完返回 0
-
管道为空:读阻塞