内容提要:
1.管道简介
Unix中的进程间通信方式之一是通过管道实现的,管道分为有名管道和无名管道,对于有名管道FIFO,可以实现没有亲缘关系的进程间通信,而对于无名管道,可以实现父子进程间的通信。
管道这种IPC存在的意义是为了实现进程间消息的传递。无名管道是Unix最初的IPC形式,但是由于无名管道的局限性,后来出现了有名管道FIFO,这种管道由于可以在文件系统中创建一个名字,所以可以被没有亲缘关系的进程访问。
管道打开后的标识是以文件描述符的形式提供的,可以使用Unix系统中的read和write系统调用访问。
管道的实现形式有多种,在一些系统中,管道被实现为全双工的,在管道的一端既可以读也可以写,但是Posix.1和Unix 98只要求半双工管道,在Linux系统中,管道是半双工的。
IPC类型
持续性
用于打开或创建IPC的名字空间
IPC打开后的标识
fork, exec和exit对IPC对象的影响
fork
exec
_exit
管道
随进程
没有名字
描述符
子进程取得父进程的所有打开着的描述符的副本
所有打开着的描述符继续打开着,除非已经设置描述符的FD_CLOEXEC位
关闭所有打开着的描述符,最后一个关闭时删除管道或FIFO中残留的所有数据
FIFO
路径名
Unix中的无名管道是通过 pipe 函数创建的,该函数创建了一个半双工的管道。
1 #include <unistd.h>2 3 int pipe(int fd[2]);4 5 返回值:成功返回0,,出错返回-1分明是比谁记的都清楚,比谁都更加在意,