1、进程间通信
每个进程有独立的用户地址空间,所以一个进程是看不到另一个进程中的数据包括全局变量。进程间通信是需要通过内核来进行的,内核中开辟一块缓存,不同的进程将数据写到这里或从这里读取,从而实现不同进程之间的通信,内核提供的这种机制称为进程间通信。进程间通信方式有多种,不同的方式提供的共享资源形式不同或者提供者不同。管道就是这其中的一种。
2、管道的创建
管道的创建使用pipe()系统调用,关于此系统调用可参见另一篇文章中的描述——高级IO函数。
3、管道实现进程间通信
管道一般用于有关系的进程之间的通信,例如父子进程之间的通信:
- 父进程创建了一个管道,f[0]、f[1]分别为管道两端的文件描述符
- 父进程通过fork函数创建子进程,此时子进程继承了父进程的管道,也有一对文件描述符f[0]、f[1]。
- 由于管道只能单向传输数据,所以父子进程必须一个关闭f[0],另一个关闭f[1],才能实现通信。如下图所示,即为管道实现进程间通信的抽象描述。
管道实现进程间通信代码示例:
<