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

进程间通信与管道

通信的目的:达成多进程的协同

数据传输

资源共享

通知事件 

进程控制

进程间通信的本质:让不同的进程先看到同一份资源(通常由OS提供)

子进程拷贝父进程的fd表,fd表指向的文件属于文件操作,不需要拷贝,父子fd表指向同一个文件。

管道只允许单向通信

我们如何让不同的进程看到同一个文件管道?

根据父子进程的创建。

管道 pipe

什么是管道?

进程间通信的功能

将一个进程连接到另一个进程的一个数据流称为管道

 

 

 

 

父进程在对一个文件进行读写操作时会分配两个file_struct分别管理读和写文件,子进程拷贝父进程的fd表也指向这两个fd[0] fd[1],当管道建立好,父进程关闭自己的写权限,子进程关闭自己的读权限,此时形成子写父读的管道。

匿名管道

int pipe[int fd[2]]

fd[2]:输出型参数,以读和写分别创建2个struct file文件

创建管道

第一步:建立管道

第二步:让父进程创建子进程

第三步:父子关闭不需要的fd,形成单向通信的管道

 

 

为什么一定要用通道,父子进程不是也可以形成数据交换?

父进程给子进程的数据是不可变化的,而且只能是父进程给子进程,而管道可以形成变化的相互通信

a.管道的四种情况

1.如果管道没有数据了,读取端必须等待直到有数据为止(写段写入数据)

2.如果管道被写满了,写端必须等待,直到有空间为止(读端读走数据)

3.写段关闭,读端一直读取,读端会读到read返回值为0,表示读到文件的结尾

4.读端关闭,写端一直写入,OS会直接杀掉写端进程,向目标发送SIG

 

b.管道的五种特性

1.匿名管道,可以允许具有血缘关系的进程之间进行进程间通信,常用于父子,仅限于此。

2.匿名管道给读写端提供同步机制

3.匿名管道是直接面向数据流的

4.管道的生命周期是随进程的

5.管道是单向通信的,半双工通信(一个人说,一个人听)的一种特殊情况

管道大小?

ulimit -a


http://www.kler.cn/a/293602.html

相关文章:

  • ⾃动化运维利器Ansible-基础
  • 软件测试:测试用例详解
  • 容器技术在DevOps中的应用
  • 搭建Python2和Python3虚拟环境
  • 结构体(c语言)
  • 《MYSQL45讲》误删数据怎么办
  • 如何在Excel中创建一个VBA宏,并设置一个按钮来执行这个宏
  • AWS账号关闭后的影响:您需要知道的一切
  • AWTK HTML View 控件更新
  • 机器学习如何用于音频分析?
  • Unity中使用四元数限制旋转
  • 在目标检测模型中使用正样本和负样本组成的损失函数。
  • 区块链技术介绍
  • 消息可靠投递
  • 数据赋能(199)——开发:数据开发管理——概述、关注焦点
  • 批量文件编码转换用python实现的utf8转gb2312,vscode设置特殊文件的默认打开编码
  • 数据赋能(198)——开发:数据应用——技术方法、主要工具
  • DAY69
  • vue , 微信小程序 , uni-app绑定变量属性
  • 【2024】MySQL库表基本操作
  • 算法:图片压缩算法【Z字行扫描】(Java实现)
  • 相亲交友系统商业开发
  • 【最新华为OD机试E卷-支持在线评测】分糖果(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 用ACF和PACF计算出一堆数据的周期个数以及周期时长,数据分析python
  • Linux系统练习笔记【完整版】
  • .NET/C#⾯试题汇总系列:⾯向对象