目录
进程通信是什么?
进程通信就是两个或多个进程之间进行数据层面的交互。
进程通信的本质
进程之间要想通信它们之间必须要有同一份“资源”,进程通过向“资源”里写入数据让其他进程读取被写入的数据从而实现进程间的数据交互,那这份资源要让谁来提供呢?该“资源”其实就是操作系统提供的内存,因为进程是具有独立性的如果这份“资源”由想要进行通信的进程提供就会破坏进程的独立性,因此必须要让第三方即操作系统来提供。
匿名管道:基于文件级别的通信方式
我们把从一个进程连接到另一个进程的一个数据流称为一个“管道“。
pipe函数
头文件:<unistd.h>
功能:创建一个匿名管道
函数原型:int pipe(int pipefd[2])
参数:fd,文件描述符数组,其中fd[0]表示读端, fd[1]表示写端
返回值:
站在文件描述符角度-深度理解管道原理
进程之间要进行单向通信,所以一个进程在通信时只能打开读端或写端!
进程fork后生成一个子进程,该子进程的files_struct是拷贝父进程的files_struct,因此子进程文件描述附表指向同样的内存级文件(管道),内存级文件,该文件在操作系统内核中,在磁盘上无对应的文件,由于每个进程打开管道时都有读端和写端,即每个进程都能向管道里写数据和从管道里读数据。