当前位置: 首页 > news >正文

【Linux:管道】

进程间通信背景:

每一个进程想要访问物理内存,都是通过访问进程虚拟地址空间当中的虚拟地址进行访问,访问时,通过各自的页表结构,造成了每一个进程和每一个进程的数据独立,由于进程独立性的存在,进程运行时不会相互干扰,但是造成了进程与进程之间相互协作的难点。由此学习进程间通信本质就是为了进程与进程交换数据时使用

进程通信的前提是不同的进程能看见同一份资源 


 进程间通信的方法:

  1. 管道
  2. 共享内存
  3. 消息队列&信号量
  4. 信号

管道符号:| 

ps aux|grep xxx

  ps:本质都是可执行程序

  grep:可执行程序

将ps aux的输出内容通过管道|作为grep xxx的输入内容

 管道的本质:

管道在内核当中是一块缓冲区,供不同的进程进行读写的缓冲区

管道的接口:

int pipe (int pipefd[2]);

pipefd:数组,输出型参数。

pipefd[0],pipefd[1]是pipe函数进行填充的,参数当中保存的是文件描述符,两个文件描述符分别对应管道的读写两端。

pipefd[0]:管道的读端

pipefd[1]:管道的写端

返回值:0代表创建成功,-1表示创建失败

管道的特性:

  1. 管道是半双工通信的,数据流只能从写端流向读端
  2. 匿名管道在内核创建出来的缓冲区是没有标识符的,导致了其他进程没有办法直接找到这个缓冲区,但是创建的进程可以通过读写两端的文件描述符进行操作
  3. 匿名管道只支持具有亲缘性关系的进程(父子进程)进行进程间通信
  4. 在进行父子进程通信时,父进程先创建管道再创建子进程,此时子进程的文件描述符表中才会有匿名管道的读写两端的描述符 
  5. 当文件描述符保持基础属性(阻塞),一直调用write将管道写满后,write函数就会阻塞
  6. 管道的生命周期是跟随进程的
  7. 管道的通信是面对字节流的,写入与读取的次数并不是一一匹配的

http://www.mrgr.cn/news/10116.html

相关文章:

  • 【审批流】springboot+vue+activiti平台,直接接入业务表单,成熟工作流
  • 20240827 每日AI必读资讯
  • 华为手机换ip地址怎么换?手机换ip地址有什么影响
  • Windows电脑本地安装跨平台文生音乐AI应用MusicGPT详细教程
  • 数据库架构演变过程
  • 《黑神话悟空》幽魂怎么打?大头怪幽魂打法攻略
  • Redis(面试篇)
  • 高可用IP地址管理:使用Keepalived和Nginx实现VIP及IP池配置
  • Linux | 探究C语言文件接口与Linux系统文件接口的区别与联系 | fopen和open的区别与联系
  • 爆改YOLOv8 | yolov8添加MSDA注意力机制
  • 云HIS系统源码(云医院信息系统)一套基于云计算技术的现代化医院管理系统
  • Python办公自动化实现考试系统生成Word试卷【2】
  • gis硕士都有哪些国企可以进?
  • UE5 多个类选择界面生成。解决方案思路。
  • Autodesk系列软件批量激活工具出现许可证管理器版本不被支持问题解决方案!
  • SpringBoot集成kafka-消息转发@sendTo()注解
  • Bootstrap01----容器,网格系统,文字排版,颜色
  • C++学习笔记——交换值
  • 专利写作笔记
  • TCP 如何保证可靠性?