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

进程间通信 - 通道

进程间通信 - 通道

什么是管道?

进程间的通信方式有五种,分别为:管道、信号量、共享内存、消息队列套接字

管道:本质上就是一个文件,前面的进程以写方式打开文件,后面的进程以读方式打开。这样前面写完后面读,于是就实现了通信。即把一个进程的输出直接连接在另外一个进程的输入。

虽然实现形态上是一个特殊文件,对管道的读写可以使用普通的read(),write()函数,但管道不属于任何文件系统(管道本身并不占用磁盘或者其他外部存储的空间)。

在Linux的实现上,它占用的是内存空间,只存在于内存中。所以,Linux上的管道就是一个操作方式为文件的内存缓冲区。即管道本质上是内核的一块缓存

管道分为有名管道和无名管道两种,它们的区别是:

  • 无名管道:又称为匿名管道(Anonymous Pipe),只能在亲缘进程(是指有同一个祖先如父子进程、兄弟进程)之间进行通信。
  • 有名管道:又称为命名管道(Named Pipe),可以在任意两个进程之间进行通信。

管道通信模式

通信模式分为:

  • 单工:数据只在一个方向上传输,不能实现双方通信
  • 半双工(切换的单工):允许数据在两个方向上传输,但是同一时间数据只能在同一个方向上传输
  • 全双工:允许数据在两个方向上同时传输

管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道,

管道的特点

  1. 管道是半双工的
  2. 管道提供流式服务,字节流通信,没有消息边界,多个进程同时发送的字节流混在一起,则无法分辨消息,所有管道一般用于两个进程之间通信。
  3. 管道的内容读完后不会保存
  4. 一般而言,进程退出,管道释放,所以管道的生命周期跟随进程
  5. 一般而言,内核会对管道操作进行同步与互斥
  6. 匿名管道一般用于亲缘进程间通信,命名管道一般用于两个无关联进程间通信

匿名通道(PIPE)

是一种亲缘进程间的通信方法。匿名管道存在于kernel(内核)中,A,B必须具有亲缘关系进程。同一时刻,只能有一个写端或一个读端。

父子进程间,只要是**fork()**出来的,就会完美复制父进程的数据。如果在fork0)之前创建管道,并获取管道的操作接口,子进程就能使用管道。

命名管道(FIFO)

**命名管道(Named Pipe)**是一种独立进程之间通信的机制,用于在无关的进程之间进行数据传输。

与匿名管道不同,命名管道不需要亲缘关系的进程之间,也不需要共享同一终端。任意进程可以通过打开命名管道的读取端和写入端来与其进行通信。

命名管道通过在文件系统中创建一个特殊的文件来实现通信。这个特殊的文件被称为FIFO(First-inFirst-out)或命名管道。

命名管道通信的原理:

  • 和匿名管道一样,想让双方通信,必须先让双方看到同一份资源!它和匿名管道本质是一样的,只是看到资源的方式不同。
  • 匿名管道是通过父子进程继承来看到同一份资源的,也叫做管道文件,这个文件是纯内存级的,所以没有名字,叫做匿名管道。
  • 而命名管道是在磁盘上有一个特殊的文件,这个文件可以被打开,但是打开后不会将内存中的数据刷新到磁盘。在磁盘上就有了路径,而路径是唯一的,所以双方就可以通过文件的路径 来看到同一份资源,即管道文件。

命名管道的特点:

  1. 命名管道可以使互不相关的两个独立进程实现彼此通信
  2. 命名管道可以通过路径名来指出,并且在文件系统中是可见的。在建立管道之后,两进程就可以把它当作普通文件进行读写,使用非常方便。
  3. FIFO严格遵循先进先出原则,对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。命名管道不支持如Iseek0)等文件的定位操作。
  4. 命名管道依然在内核态内存中
  5. 命名管道在文件系统中有节点(即在文件系统中可以找到)
  6. 命名管道严格遵循先进先出原则
  7. 命名管道不能使用文件重定位的函数lseek()
  8. 命名管道可以用在亲缘和非亲缘进程间(一般用于非亲缘进程间通信)

管道命名

在Linux shell中执行命令,经常会将上一个命令的输出作为下一个命令的输入,由多个命令配合完成一件事情。而这就是通过管道来实现的。|这个竖线就是管道符号

Is-llgrep string //grep是抓取指令

●1s命令(其实也是一个进程)会把当前目录中的文件都列出来但它不会直接输出,而是把要输出到屏幕上的数据通过管道输出到grep这个进程中,作为grep这个进程的输入;

●然后这个进程对输入的信息进行筛选(grep的作用),把存在string的信息的字符串(以行为单位)打印在屏幕上。

在这里插入图片描述

相关文章:

进程间通信 - 通道

进程间通信 - 通道 什么是管道? 进程间的通信方式有五种,分别为:管道、信号量、共享内存、消息队列和套接字。 管道:本质上就是一个文件,前面的进程以写方式打开文件,后面的进程以读方式打开。这样前面写完后面读,于…...

华为数通HCIA系列第5次考试-【2024-46周-周一】

文章目录 1、子网掩码有什么作用,和IP地址是什么关系,利用子网掩码可以获取哪些信息?2、已知一个IP地址是192.168.1.1,子网掩码是255.255.255.0,求其网络地址3、已知某主机的IP地址是192.168.100.200,子网掩…...

【Linux】如何通过终端命令查看当前可用网络 WIFI + 设置已配置网络的连接优先级 + 连接/断连网络

【Linux】通过命令行,查看当前可用网络 WIFI 设置已配置网络的连接优先级 连接网络 列出所有可连接网络 nmcli device wifi list这个命令会列出所有可连接 wifi,*表示当前连接。 IN-USE BSSID SSID MODE CHAN …...

华为路由策略配置

一、AS_Path过滤 要求: AR1与AR2、AR2与AR3之间建立EBGP连接 AS10的设备和AS30的设备无法相互通信 1.启动设备 2.配置IP地址 3.配置路由器的EBGP对等体连接,引入直连路由 [AR1]bgp 10 [AR1-bgp]router-id 1.1.1.1 [AR1-bgp]peer 200.1.2.2 as-nu…...

Debezium日常分享系列之:异步 Debezium 嵌入式引擎

Debezium日常分享系列之:异步 Debezium 嵌入式引擎 动机目标非目标保留Kafka Connect模型计划的更改线程池并行运行源任务存储偏移量并发处理CDC事件禁用CDC事件的完全排序自定义记录处理器并行处理记录的选项存储偏移量引擎状态和生命周期防止资源泄漏异常处理退出…...

leetcode206. Reverse Linked List

Given the head of a singly linked list, reverse the list, and return the reversed list. 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 思路一:双指针 class Solu…...

【MATLAB源码-第291期】基于matlab的AMI编码解码系统仿真,输出各个节点波形。

操作环境: MATLAB 2022a 1、算法描述 AMI(Alternate Mark Inversion,交替极性反转)是一种广泛使用的编码方法,尤其是在通信系统中,用于传输二进制数据。AMI编码的特点是在传输过程中,对于0信…...

springboot苍穹外卖实战:十一:复盘总结

近期在整理草稿区&#xff0c;故放出此贴。 server模块需要导入对common模块的依赖 <dependency><groupId>org.example</groupId><artifactId>sky-common</artifactId><version>1.0-SNAPSHOT</version></dependency>我现在有个…...

基于Python的药房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

chat2db数据库图形化工具

数据库图形化工具 DataGrip&#xff1a;由 JetBrains 公司开发&#xff0c;是开发者中广为人知的数据库管理工具&#xff0c;功能强大且支持多种数据库。DBeaver&#xff1a;一款开源的数据库管理工具&#xff0c;虽然相对 DataGrip 知名度稍低&#xff0c;但在开发者社区中也…...

弱口令整改方案:借助双因子认证加强账号密码安全

弱口令整改方案可借助宁盾 2FA双因子身份认证来解决。双因子认证&#xff08;也称双因素身份认证&#xff09;是一种安全认证机制&#xff0c;通过结合两个及以上不同的身份验证因子&#xff0c;提高企业用户在办公、研发、生产、运维场景下的的账号密码安全性。它可以有效防止…...

动态代理的优势是什么?

在数据采集的世界里&#xff0c;效率和稳定性是衡量代理IP服务优劣的关键指标。动态代理&#xff0c;作为一种高效的网络工具&#xff0c;正逐渐成为企业和开发者的首选。今天&#xff0c;我们就来聊聊动态代理的优势&#xff0c;以及它如何成为数据采集的高效之选。 动态代理…...

将大型语言模型(如GPT-4)微调用于文本续写任务

要将大型语言模型&#xff08;如GPT-4&#xff09;微调用于文本续写任务&#xff0c;构造高质量的训练数据至关重要。以下是如何构造训练数据的详细步骤&#xff1a; 1. 数据收集&#xff1a; 多样性&#xff1a; 收集多种类型的文本&#xff0c;包括小说、新闻、论文、博客等…...

引入了JUnit框架 却报错找不到:java.lang.ClassNotFoundException

完整报错如下&#xff1a; Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID junit-jupiter failed to discover tests at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrc…...

深度学习:tensor的定义与维度

tensor的定义与维度 Tensor的定义与维度 Tensor是一个多维数组&#xff0c;用于在一般化的n维空间中表示数据和操作。在深度学习框架中&#xff0c;如TensorFlow或PyTorch&#xff0c;Tensor是基础数据结构&#xff0c;用来存储输入、输出、权重等信息。下面是Tensor不同维度…...

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api

前提&#xff1a; 从前面的学习我们知道 AVFrame中是最原始的 视频数据&#xff0c;这一节开始我们需要将这个最原始的视频数据 压缩成 AVPacket数据&#xff0c; 我们前面&#xff0c;将YUV数据或者 RGBA 数据装进入了 AVFrame里面&#xff0c;并且在SDL中显示。 也就是说&…...

算法——移除元素(leetcode27)

对于移除元素这道题来讲,我首先想到的还是双指针&#xff0c;根据题目要求我们需要在给定的一组数组中找出与目标值不同的元素数量并且将与目标值不同的元素全部移至数组左边右边则不需关注数组元素的大小&#xff0c;我们利用两个指针一个指向数组首部位置&#xff08;左指针&…...

『OpenCV-Python』安装以及图像的读取、显示、保存

点赞 + 关注 + 收藏 = 学会了 OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、机器学习和实时计算机视觉应用。比如图像和视频的滤镜和降噪、物体检测、人脸识别、证件号识别、车牌识别等应用。当然,也有其他工具可以对这些领域做支持,但本专栏是介绍 OpenCV 的,所…...

python开发桌面应用(跨平台) 全流程

前言 之前开发一些软件,亚马逊商品分析相关软件,但是基本上是通过程序猿控制台命令启动,同时在启动之前,还要进行程序依赖包,这对于非开发人员而言,简直是一种灾难, 为了让软件对于小白更加易用, 打算将其封装成应用程序(跨平台), 下面带大家一起完成python开发桌面应用的三步…...

告别L298N!用TB6612驱动模块给你的STM32循迹小车降功耗提性能

告别L298N&#xff01;用TB6612驱动模块给你的STM32循迹小车降功耗提性能 在嵌入式开发领域&#xff0c;电机驱动模块的选择往往决定了整个项目的能效表现和稳定性。对于参加电子设计竞赛的学生和硬件爱好者来说&#xff0c;如何在有限的电池容量下实现更长的运行时间和更精准的…...

京东自动购物系统:高效补货监控与智能下单终极指南

京东自动购物系统&#xff1a;高效补货监控与智能下单终极指南 【免费下载链接】Jd-Auto-Shopping 京东商品补货监控及自动下单 项目地址: https://gitcode.com/gh_mirrors/jd/Jd-Auto-Shopping 在电商购物场景中&#xff0c;错过心仪商品的补货时机是每个消费者都可能遇…...

终极游戏翻译解决方案:XUnity.AutoTranslator完整指南

终极游戏翻译解决方案&#xff1a;XUnity.AutoTranslator完整指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏中的对话和界面烦恼吗&#xff1f;语言障碍是否让你错过了无数精彩的游戏…...

Token经济学正在重构芯片工程师的生存逻辑(万字长文深度拆解“token“这个计量单位的对于芯片工程师的意义)

英伟达CEO黄仁勋把AI产业分成五层&#xff1a;能源、芯片、基础设施、模型、应用。芯片在第二层&#xff0c;属于重资产制造业的核心环节。但问题来了&#xff0c;在 芯片&#xff08;包括AI芯片&#xff09;成本内卷时代&#xff0c;芯片工程师的技术&#xff0c;到底还能值多…...

Frida精准Hook Android HttpURLConnection实现HTTP流量分析

1. 这不是“Hook任意函数”的泛泛而谈&#xff0c;而是专治HttpURLConnection的精准手术刀 你有没有遇到过这种情况&#xff1a;想快速看清楚某个Android App到底往哪个URL发了什么HTTP请求、带了哪些Header、Body里塞了什么敏感参数&#xff0c;结果一上Frida就卡在“该Hook哪…...

Windows打印服务总罢工?手把手教你排查并修复Print Spooler自动停止问题

Windows打印服务罢工&#xff1f;深度排查Print Spooler自动停止问题 办公室里最让人抓狂的时刻之一&#xff0c;莫过于点击打印后毫无反应&#xff0c;而打印机明明亮着绿灯。这种时候&#xff0c;十有八九是Windows的Print Spooler服务在"闹罢工"。作为Windows打印…...

BFloat16与SME2指令集在AI加速中的应用

1. BFloat16浮点格式解析BFloat16&#xff08;Brain Floating Point 16&#xff09;是专为机器学习设计的16位浮点格式&#xff0c;它在保持与32位单精度浮点&#xff08;FP32&#xff09;相同指数位宽&#xff08;8位&#xff09;的同时&#xff0c;将尾数位从23位缩减到7位。…...

CANN ops-nn:基础神经网络算子的统一实现层

个人主页&#xff1a;ujainu 文章目录 前言仓库定位&#xff1a;为什么需要一层"统一实现"算子不是"公式翻译"&#xff0c;是对硬件的谈判Conv2D&#xff1a;im2col 转矩阵乘BatchNorm&#xff1a;推理折叠成逐元素运算Interpolate&#xff1a;双线性插值的…...

从Voronoi图到Lloyd算法:分布式传感器网络收敛性证明与工程实践

1. 从几何直觉到数学证明&#xff1a;理解传感器网络的收敛性在分布式传感器网络、无人机编队或者移动机器人集群的部署中&#xff0c;一个核心问题是如何让这些自主节点在没有中央控制器的情况下&#xff0c;高效、均匀地覆盖一个目标区域&#xff0c;并最终收敛到我们关心的关…...

FPGA与机器学习协同加速量子点自动调谐:原理、实现与性能分析

1. 项目概述&#xff1a;当FPGA遇上机器学习&#xff0c;量子点调谐的“自动驾驶”时代在量子计算实验室里&#xff0c;调谐一个量子点器件进入单电子态&#xff0c;是每个实验物理学家都绕不开的“苦差事”。这活儿有多磨人&#xff1f;你得坐在仪器前&#xff0c;手动调节两个…...