【Linux进程通信】进程间通信介绍、匿名管道原理分析

目录

进程通信是什么?

进程通信的目的

 进程通信的本质

匿名管道:基于文件级别的通信方式

站在文件描述符角度-深度理解管道原理


进程通信是什么?

进程通信就是两个或多个进程之间进行数据层面的交互。

进程通信的目的

1.数据传输:一个进程需要将自己的数据传输给另一个进程。

2.资源共享:多个进程间共享同样的资源。

3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

 进程通信的本质

进程之间要想通信它们之间必须要有同一份“资源”,进程通过向“资源”里写入数据让其他进程读取被写入的数据从而实现进程间的数据交互,那这份资源要让谁来提供呢?该“资源”其实就是操作系统提供的内存,因为进程是具有独立性的如果这份“资源”由想要进行通信的进程提供就会破坏进程的独立性,因此必须要让第三方即操作系统来提供。

匿名管道:基于文件级别的通信方式

我们把从一个进程连接到另一个进程的一个数据流称为一个“管道“。

pipe函数

头文件:<unistd.h>
功能:创建一个匿名管道
函数原型:int pipe(int pipefd[2])
参数:fd,文件描述符数组,其中fd[0]表示读端, fd[1]表示写端
返回值:

站在文件描述符角度-深度理解管道原理

7182fcec074e442ea046e42d367f0d33.png

cca3403a850e4062b8281504b60b310d.png

ba26abb3102b4c5fbcca7ac52fa12231.png

进程之间要进行单向通信,所以一个进程在通信时只能打开读端或写端!

a5a8db17b18b4870af3ebeaad8fce51f.png

进程fork后生成一个子进程,该子进程的files_struct是拷贝父进程的files_struct,因此子进程文件描述附表指向同样的内存级文件(管道),内存级文件,该文件在操作系统内核中,在磁盘上无对应的文件,由于每个进程打开管道时都有读端和写端,即每个进程都能向管道里写数据和从管道里读数据。

如果要通信的两个进程没有任何关系,可以用上述依据文件描述符角度来进行进程间通信吗?

不可以,因为如果两进程不是父子、兄弟、爷孙关系,两进程的files_struct就没有相同的管道文件的struct  file*类型的指针,就不能找到同一个管道进行数据交互了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值