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


    目录

    进程通信是什么?

    进程通信的目的

     进程通信的本质

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

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


    进程通信是什么?

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

    进程通信的目的

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

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

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

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

     进程通信的本质

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

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

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

    pipe函数

    头文件:
    功能:创建一个匿名管道
    函数原型: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*类型的指针,就不能找到同一个管道进行数据交互了!

  • 相关阅读:
    Linux中查找某路径下,包含某个字符串的所有文件
    Android 系统开发人员的权限说明文档
    vue3语法严禁问题
    Elasticsearch:(二)1.安装Elasticsearch
    腾讯云TKE-助力游戏出海的新引擎
    宁夏果蔬系统
    我的创作纪念日
    手把手教你语音识别
    JavaSE List
    【微电网优化】萤火虫算法求解微电网优化问题【含Matlab源码 2146期】
  • 原文地址:https://blog.csdn.net/2401_84568462/article/details/140054667