【Linux】:进程间通信及管道

朋友们、伙计们,我们又见面了,本期来给大家带来进程间通信相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

1. 进程间通信

1.1 进程间通信的目的

1.2 进程间通信的分类

2. 管道

2.1 匿名管道

2.2.1 创建原理(文件描述符角度)

2.2.2 创建原理(内核角度) 

2.2.3 管道的创建 

2.2.4 管道的4种情况

2.2.5 管道的5种特性 

2.2 命名管道

2.2.1 创建原理

2.2.2 管道的创建 

2.2.3 进程通信


1. 进程间通信

1.1 进程间通信的目的

  • 数据传输:一个进程需要将它的数据发送给另一个进程
  • 资源共享:多个进程之间共享同样的资源
  • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
  • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

进程间通信的本质:先得让不同的进程看到同一份资源。这个资源不能由进程双方的任何一方提供,通常是由OS提供。

1.2 进程间通信的分类

管道

  • 匿名管道pipe
  • 命名管道

System V 进程间通信

  • System V 消息队列
  • System V 共享内存
  • System V 信号量

POSIX 进程间通信

  • 消息队列
  • 共享内存
  • 信号量
  • 互斥量
  • 条件变量
  • 读写锁

2. 管道

我们之前在命令行使用的 | 就是一种管道,那么我们在命令行使用管道,它肯定会在底层给我们转化成对应的操作;

  • 管道是Unix中最古老的进程间通信的形式。
  • 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”

  

2.1 匿名管道

  • 当一个进程打开一个文件时,会给其分配对应的文件描述符,新打开的文件里面主要的是文件的inode(保存文件属性)、方法集(对应的读写方法)、文件页缓冲区;
  • 文件的PCB、描述文件结构体对象都是属于进程管理操作;文件描述符的分配管理属于内存操作,两者互不相干;
  • 此时如果调用fork创建子进程时,新创建的子进程根据父进程PCB为模版创建自己的PCB,子进程的文件描述符的指向和父进程指向一致(并不会重新分配);
  • 所以父进程打开的文件此时也会被子进程看到,这样子就形成了两个进程看到同一份资源,具备了进程间通信的条件;
  • 当父进程想往文件写入数据时,子进程也可以看见,但是父进程向该文件写入时,不需要再刷新到磁盘,然后子进程再从磁盘读入数据,这样效率太低下(访问外设),所以这个文件就是纯内存级文件,这个文件叫做管道文件;
  • 该管道文件可以不需要名字,并且用于父子进程通信,该管道叫做匿名管道;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stackY、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值