文章目录
- 进程间通信(IPC)
- 管道
- 管道特点
- 为什么可以使用管道进行进程间通信
- 管道数据结构
- 匿名管道的使用
- 管道实例
- 管道读写特点
- 管道设置非阻塞
进程间通信(IPC)
inter process conmmunication
👇👇👇*&*:
上边除了共享内存还可以使用内存映射。
管道
管道特点
为什么可以使用管道进行进程间通信
在使用fork创建进程后,文件描述符被复制,有两个相同的文件描述符同时指向管道。
管道数据结构
匿名管道的使用
注意: 匿名管道只能用于具有关系的进程之间的通信(父子,兄弟,孙子进程)。
使用读函数读取的时候管道没有资源会进入阻塞态。
获取管道大小:
可以通过ulimit -a
也可以通过long size = fpathconf(fd, _PC_PIPE_BUF)
,返回值就是其大小.
匿名管道情况:
管道实例
dup2文件描述符的重定向
管道读写特点
阻塞IO操作
读管道:
当管道中有数据,读取时返回实际读取的字节数。
当管道中没有数据:
如果有写端,则阻塞等待数据;
如果没有写端,则返回0。
写管道:
若没有读端,进程异常终止(进程收到SIGPIPE信号)
当有读端时:
当管道满了,则写时进入阻塞等待有空间再写;
管道没有满,write写入数据,并返回实际写入的字节数。
对于非阻塞的操作:
非阻塞输入时,阻塞状态的情况会返回-1.