无名管道的概念|学习笔记

简介: 快速学习无名管道的概念

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频无名管道的概念 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11025


无名管道的概念

 

内容介绍

一、管道概述

二、特点

三、总结

 

一、管道概述

管道 (pipe )又称无名管道。还有一种是命名管道。

无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。

特殊体现在文件当中是找不到的,因为他没有属于自己的文件名。操作文件的时候通过文件描述符,open 打开一个文件的时候得到一个描述符,通过文件描述符对文件进行读或者写。

无名管道没有名字,在程序当中去创建无名管道,就能得到两个文件描述符,通过文件描述符对文件进行读或者写。

假如说两个进程,中间有一个管道,1进程可以往管道里写东西,2进程可以从管道读东西。

管道有两个文件描述符,一个是为了写而打开的,另外一个是为读而打开的。

image.gif

 

二、特点

管道是最古老的 UNIXIPC 方式,

其特点是:

1、半双工,数据在同一时刻只能在一个方向上流动。

举例

有两个进程但只有一个管道,这两个进程要通过管道传输数据

如果两个数据都通往管道,那他的数据就乱了。

image.gif

应该是一个进程写进去,一个进程读出去

image.gif传输数据之后再从另一个方向传输进程

image.gif扩展一下单工,全双工

单工通信:

消息的传送是单项的。例如生活使用的收音机,只能接收消息,例如GPS导航只能接收卫星数据,是不能给卫星发送数据的。

半双工通信:

例如对讲机,发送消息的时候没办法收到,收到消息的时候没有办法发送同步消息。

全双工通信:

例如手机,打电话的时候听着对方生音还可以通话,发送消息的同时还可以接收消息。

2、数据只能从管道的一端写入,从另一端读出。

3、写入管道中的数据遵循先入先出的规则。

例如在管道里面放球体,先放进去的必然先出来

4、管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,例如数据的发送方和接收方规定好,一次性发送一百个字节,对方接收一百个字节,而且这一百个字节,每一个的意义都是双方自行约定的,如多少字节算一条消息等。

5、管道是文件,但不是普通的文件,不属于某个文件系统,其只存在于内存中。比如在硬盘上是看不到这个文件的,因为这个管道没有名字。

6、管道在内存中对应一个缓冲区。因为它存在于内存,我们在管道里面写数据,存放在缓冲区里面,不同的系统其大小容量不一定相同。

7、从管道读数据是一次性操作,数据一但被读走,它就从管道中被抛弃,释放空间以便写更多的数据。

这是进程通信必须的,不然会乱。也就是说这个进程写了helword,被下一个进程读出去了,就相当于被管道抛弃了。

8、管道没有名字,只能在具有公共祖先的进程之间使用。不相关的进程,他的地址是独立的。不相关的进程是没有两个图片描述符的,所以他就没办法去操作管道。

所以要想使用无名管道进行通信,在这个进程当中去创建一个管道,得到了两个文件描述符,然后这个进程去fork,用fork创建一个进程,得到了一个子进程,子进程可以继承了父进程,然后子进程就可以通过fd1往管道里面写数据,通过fd0去读数据,所以要想使用无名管道进程间通信,前提是这些进程都拥有管道的描述符。

所以,使用无名管道进行通信的进程必须是父进程和子进程,或者是父进程和分进程等等拥有管道描述符这些进程之间进行通信。

因为管道是个特殊文件,不能通过open+路径的方式来找到管道的只能把文件的管道符继承下去。

image.png


三、总结

管道是一个特殊的文件,存在于内存当中,无名管道没有名字,只能在父子进程之间进行通信,创建管道的时候得到两个文件描述符,为读而打开的,为写而打开的文件描述符。

管道还具有先进先出的特点,先写的数据会被先读出来,数据一旦被读出来,从管道当中就被抛弃了,属于半双工通信。

相关文章
|
并行计算 PyTorch 算法框架/工具
社区供稿 | 本地部署通义千问大模型做RAG验证
这篇文章中,我们通过将模搭社区开源的大模型部署到本地,并实现简单的对话和RAG。
|
安全 网络安全 数据安全/隐私保护
【计算机网络】URL概念及组成
【计算机网络】URL概念及组成
|
编解码 算法 知识图谱
ICCV 2023 | DAT:利用双重聚合的Transformer进行图像超分
ICCV 2023 | DAT:利用双重聚合的Transformer进行图像超分
444 0
|
敏捷开发 数据可视化 持续交付
敏捷开发方法:理论与实践
【8月更文第22天】随着信息技术的发展,软件项目的复杂度不断提高,传统的瀑布式开发模式越来越难以适应快速变化的市场需求。为了解决这些问题,敏捷开发方法应运而生。本文将探讨敏捷开发的核心理念、敏捷宣言与原则、Scrum框架、Kanban方法以及相关的敏捷实践与工具。
1681 2
|
弹性计算 运维 监控
函数计算产品使用问题之如何在阿里云端stable-diffusion训练lora
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
252 1
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
380 0
|
机器学习/深度学习 移动开发 数据可视化
贝叶斯优化实战(一)(4)
贝叶斯优化实战(一)
595 0
|
关系型数据库 Linux KVM
Docker是什么,有什么用?
Docker是什么,有什么用?
10142 60
Docker是什么,有什么用?
|
存储 机器学习/深度学习 PyTorch
Pytorch学习笔记(9)模型的保存与加载、模型微调、GPU使用
Pytorch学习笔记(9)模型的保存与加载、模型微调、GPU使用
1243 0
Pytorch学习笔记(9)模型的保存与加载、模型微调、GPU使用
|
算法 C++
【C/C++】阿克曼函数以及其数学的有限边界思维
## 在递归函数论和涉及集合的并的某些算法的复杂性研究中,有一个起重要作用的递归函数——阿克曼(Ackermann)函数,该函数是由希尔伯特的学生,德国著名数学家威尔海姆·阿克曼于1928年发现的。这是一个图灵机可计算的,但不是原始递归的函数。下面,我们介绍这个经典的递归函数,并给出其相应的计算过程。
1059 0
【C/C++】阿克曼函数以及其数学的有限边界思维