0.简介
IPC工具分为3类:
通信:即进程间数据的交换。
同步:即进程和线程操作的先后顺序控制。
信号:可以作为进程间同步、数据交换的一种技术。
如图:
IPC通信可以分为两类:数据传输工具和共享内存,数据传输是一端用户程序将数据写入内核,另一端的用户程序从内核取出数据。共享内存,允许进程间将数据放入共享内存中完成数据交换,速度最快。
IPC同步技术有:信号量、文件锁、互斥体与条件变量。
在程序中使用这些工具,都有唯一的标识符进行区分,如下图:
这些IPC工具在程序中使用可访问和持久性如下表:
1.管道与FIFO
管道是非常古老的IPC方法,在shell命令行也用过。
例如:ls | wc -l
这个命令就是创建两个进程执行ls和wc命令,将执行ls命令的进程标准输出连接到管道的写入端,执行wc命令的进程将标准输入连接到管道的读出端。一个管道是一个字节流,且只能按顺序读写,不能随机读写,管道是单向的(也有双向管道,替换方案是 UNIX domain 流socket对),可以确保在一个时刻写入不超过PIPE_BUF(4096)字节的操作都是原子的,管道的储存能力为65536字节。
创建管道:
#include<unistd.h> int pipe(int filefds[2]); //0 success,-1 error ,filefds[0] read,filefds[1] write