1.进程间通信目的
我们知道计算机执行某个任务时可能并不是只创建一个进程去完成,可能创建了许多进程去共同完成这个任务,这些进程在在相互协调工作时,可能需要在他们之间传输数据,共享某些资源,或者通知某个事件发生,有些进程可能还需要完全控制另一个进程(如debug进程),所以就有了进程间通信,但是我们知道每个进程都有自己独立的虚拟地址空间(分为用户空间和内核空间),进程的用户空间都是独立的,一般而言都是不能访问的,唯一例外的是共享内存区,系统空间的大部分资源是所有进程共享的,各进程均可以访问的,所以内核也可以提供这样的条件,此外所有进程都可以访问外设,所以两个进程也可以通过磁盘上的普通文件进行信息交换。
由此我们只要让不同的进程看到同一块资源
,就可以让两个进程进行信息交换。
2.进程间通信分类
2.1 管道通信
1) 管道是
半双工
的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道,自带同步机制.
2)匿名管道只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)
,命名管道则没有此限制;
3) 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
4)生命周期随进程
2.2匿名管道
创建匿名管道
头文件
#include<unistd.h>
原型
int pipe(int fd[2])
;
参数:文件描述符数组,其中fd[0]表示读端
。fd[1]表示写端
.
返回值:成功返回零,失败返回错误码。