进程间的通信——IPC
进程间通信 (IPC,InterProcess Communication) 是指在不同进程之间传播或交换信息。
IPC的方式通常有管道 (包括无名管道和命名管道) 、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。
单机:若是在单一机器上,则为单机通信
- 半双工管道
- 全双工管道
- 消息队列
- 信号量
- 共享内存
多机:多台机器上,为网络通信
管道
管道,通常指无名管道(之所以叫无名管道是因为没有文件名),是 UNIX 系统IPC最古老的形式。
特点
(1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
(2)它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
(3)它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
(4)管道中不储存数据,数据写进后读取就会消失,类似于水流。
原型
#include <unistd.h> //函数pipe包含的头文件
int pipe(int fd[2]); // 返回值:若成功返回0,失败返回-1