linux进程间通信(IPC 工具)

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

 

posted @ 2020-10-14 18:25  jest549  阅读(559)  评论(0编辑  收藏  举报