知识前提:
Linux IPC:
IPC (Inter-Process Communication)进程间通信Unix IPC:
1、信号
Unix/Linux系统在一定条件下生成的事件。信号是一种异步通信机制,进程不需要 执行任何操作来等待信号的到达。
信号异步通知接收信号的进程发生了某个事件,然后操作系统将会中断接收到信号的进程的执行,转而去执行相应的 信号处理程序。
2、管道(Pipe)
管道用来连接不同进程之间的数据流。
System V IPC
1、信号量(Semaphores)
System V的信号量集表示的是一个或多个信号量的集合。
2、共享内存
共享内存允许两个或多个进程共享一定的存储区,因为不需要拷贝数据,所以这是最快的一种IPC。
3、消息队列
消息队列保存在内核中,是一个由消息组成的链表。
Socket
套接字(Socket)是由Berkeley在BSD系统中引入的一种基于连接的IPC,是对网络接口(硬件)和网络协议(软件)的抽象。
它既解决了无名管道只能在相关进程间单向通信的问题,又解决了网络上不同主机之间无法通信的问题。
正文:
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。
调用pipe系统函数即可创建一个管道。有如下特质:
1. 其本质是一个伪文件(实为内核缓冲区)
2. 由两个文件描述符引用,一个表示读端,一个表示写端。
3. 规定数据从管道的写端流入管道,从读端流出。
管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。
管道的局限性:
① 数据自己读不能自己写。
② 数据一旦被读走,便不在管道中存在,不可反复读取。
③ 由于管道采用半双工通信方式。因此,数据只能在一个方向上流动。
④ 只能在有公共祖先的进程间使用管道。