介绍与总结以下几种进程间通信方式:
管道:
- 匿名管道
- 命名管道
System V进程间通信
- 共享内存
- 消息队列
- 信号量
管道:
半双工通信(可选方向的单向传输)。
本质是内核中的一块缓冲区。
实现进程间通信的原理:让多个进程通过访问到相同的缓冲区来实现通信。管道实现通信使用的是系统调用的IO接口(这也遵循了一切皆文件的思想)。
1、匿名管道及代码实现
匿名管道只能用于具有亲缘关系的进程间通信(子进程通过复制父进程的文件描述符作为管道的操作句柄)
匿名管道的简单实现:
首先我们要知道一个进程创建匿名管道,操作系统在内核中创建一块缓冲区,并返回两个文件描述符作为管道的操作句柄(一个用于读,一个用于写,方向的选择权交给用户),但是这个缓冲区在内核中没有标识,其它的进程找不到它,这也就是为什么匿名管道只能用于具有亲缘关系的进程间通信的原因了。这一步通过接口int pipe(int pipefd[2])来实现。
然后创建一个子进程,复制父进程的文件描述符,父进程完成写入操作,子进程进程读取操作,代码如下: