码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【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*类型的指针,就不能找到同一个管道进行数据交互了!

  • 相关阅读:
    IOS常见的bug
    从零开始在window10系统下mysql5.7安装审计插件(亲测绝对可用)
    java计算机毕业设计家电仓储管理系统MyBatis+系统+LW文档+源码+调试部署
    C++ 池式组件 线程池 内存池 异步请求池 MySQL连接池
    02 栈的原理与使用
    Android 安全功能
    分享一个开发者和设计者的免费图标库
    ArduPilot开源飞控之AP_Baro_MSP
    GDAL库学习
    C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
  • 原文地址:https://blog.csdn.net/2401_84568462/article/details/140054667
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号