管道/消息队列/共享内存

2023-10-29

 

管道通信(PIPE)

管道通信方式的中间介质是文件,通常称这种文件为管道文件。两个进程利用管道文件进行通信时,一个进程为写进程,另一个进程为读进程。写进程通过写端(发送端)往管道文件中写入信息;读进程通过读端(接收端)从管道文件中读取信息。两个进程协调不断地进行写、读,便会构成双方通过管道传递信息的流水线。

利用系统调用PIPE()创建一个无名管道文件,通常称为无名管道或PIPE;利用系统调用mknod()创建一个有名管道文件,通常称为有名管道或FIFO。

PIPE是一种非永久性的管道通信机构,当它访问的进程全部终止时,它也将随之被撤消;它也不能用于不同族系的进程之间的通信。而FIFO是一种永久的管道通信机构,它可以弥补PIPE的不足。

管道文件被创建后,便可对它进行读写操作,通过系统调用write()和read()来实现。通信完毕后,可将管道文件关闭,用close()来实现。

消息通信(MESSAGE)

消息通信方式以消息缓冲区为中间介质,通信双方的发送和接收操作均以消息为单位。在存储器中,消息缓冲区被组织成队列,通常称之为消息队列。

创建消息队列用系统调用msgget()来实现,这一步工作也被称为消息队列的初始化。在进行通信时,消息队列的发送和接收分别用系统调用msgsnd()和msgrcv()来实现。在需要改变队列的使用权限及其它一些特性时,用msgctl()来实现。

        如果要大规模的复制数据,最快的方法莫过于共享内存。管道只是所有的UNIX都支持,性能上肯定不如共享内存。
至于消息队列,有些UNIX系统肯定是不支持的。

       管道一般用于父子进程间通信(有名管道除外,有名管道不限于父子进程通信)。而消息队列可用于你机器上的任何进程间通信(只要进程有权操作消息队列)。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管道/消息队列/共享内存 的相关文章

  • 使用Sed查找并替换json字段

    我有一组 json 文件 其中在最后一个键值对之后有需要替换的逗号 RepetitionTime 0 72 TaskName WM Manufacturer Siemens ManufacturerModelName Skyra Magne
  • 类unix系统中的python和python3命令有什么区别?

    我通读了每个命令的描述 但每个命令的描述都是完全相同的 所以我不明白这两个命令在类 Unix 系统中的工作方式有何不同 谁能解释其中的区别吗 Python3命令的引入是因为python命令指向了python2 从那时起 Python3 已成
  • 在 Unix 中添加用户和组

    有谁知道在unix中添加用户和组以及删除它们的api吗 我想以编程方式执行此操作 谢谢 坦率 我开始查看一些系统调用并发现以下内容 请注意 它们具有不同的标准 因此并非所有标准都可以在您的 Unix 版本上运行 getpwent setpw
  • tar 和 zip 有什么区别? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 tar 和 zip 有什么区别 每个的用例是什么 tar其本身只是将文件捆绑在一起 结果称为tarball 尽管zip也应用压缩 通常你使用gzip随
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • UNIX系统调用监视器

    如何监控进程的系统调用 Check strace http linux die net man 1 strace 在最简单的情况下 strace 运行指定的命令直到退出 它拦截并记录进程调用的系统调用以及进程接收的信号 每个系统调用的名称
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 从 shell 命令调用 SOAP 请求

    我使用curl 向Web 服务发送SOAP 请求 并使用shell 脚本获取响应 请在下面找到我正在使用的命令 curl H Content Type text xml charset utf 8 H SOAPAction d sample
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • C# 中的 Unix 套接字

    我正在尝试使用 Mono 的 UnixEndPoint 但在使用它之前就失败了 我在 64 位 Windows 7 系统上运行 Xamarind net 4 5 下面是一些代码 证明单一组合不起作用 foreach SocketType s
  • wget 并行下载文件并重命名

    我有一个包含两列的文本文件 第一列是要保存的名称 第二列是资源的 url 地址 10000899567110806314 jpg http lifestyle inquirer net files 2018 07 t0724cheekee
  • 安装SIGTSTP前台进程

    我正在尝试为正在运行的前台进程安装 CTRL Z SIGTSTP 处理程序 我设置了处理程序 sigaction 就在我之前wait在父级中 这是正确的地方吗 好像不太好用 EDIT 我正在写一个外壳 这是我的代码的概要 我目前在父级中设置
  • #*/ 在 UNIX Shell 脚本中使用

    谁能详细说明 在 UNIX Shell 脚本中的工作原理 我已经看到它在 Korn Shell 中的使用 它专门用于删除文件的扩展名 例如 func write app log o 删除状态文件 CIE STATUS FILE 这里假设文件
  • 使用 grep 进行多种搜索模式

    考虑我有以下数据流 BODY1 attrib1 someval11 attrib2 someval12 attrib3 someval13 BODY2 attrib1 someval21 attrib2 someval22 attrib3
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 在 Unix 上,我应该对 errno 使用 system_category 还是 generic_category ?

    C 0x 有两个预定义的error category对象 generic category and system category 据我目前所知 system category 应用于操作系统返回的错误 并且generic category

随机推荐

  • vs2只运行项目中的一个文件

    最近在搞我的密码学实验 其中一个实验讲解方便起见写了两个cpp文件 每个都有main函数 然后就不能直接运行其中一个了 删来添去的也不太方便 但是一定不可能不能一次只运行一个文件 于是我就上网搜了一下 现在做个记录 看嘛 就是这样 两个都有
  • 22-04-14 最富有客户的资产总量

    1672 最富有客户的资产总量 难度 简单 给你一个 m x n 的整数网格 accounts 其中 accounts i j 是第 i 位客户在第 j 家银行托管的资产数量 返回最富有客户所拥有的 资产总量 客户的 资产总量 就是他们在各
  • iptables - 深入解析MARK和CONNMARK目标

    一 前言 MARK是iptables的一个目标 用于给数据包打上指定mark 当我们使用MARK目标的时候 通常是我们在配置策略路由 网上有很多文章介绍怎么配置策略路由的 这里不在赘述 的时候 需要给一个包加上某个mark 然后ip rul
  • 卷积与图像处理

    图像处理与卷积 卷积操作示例 平移 虚化 平滑 锐化 去噪 高斯滤波 中值滤波 边缘检测 卷积操作示例 我们在图像处理中遇到的数字图像通常分为两种 单色 灰度 图像 每个像素的亮度用一个数值来表示 取值范围0 255 0表示黑 255表示白
  • WIN10+CGAL+VS2017配置

    最近配置了CGAL4 11 3 环境为WIN10 VS2017按照网上的博客大神指导配置出了个大概 可是依然遇到不少小的问题 在这里总结一下 以供后期参考 1 CGAL的基本配置可以参考一下两篇博文 讲得非常详细 网上虽然可以直接下载到CG
  • 工业互联网平台核心技术之一:数据集成与边缘处理技术

    工业互联网平台是面向制造业数字化 网络化 智能化需求 构建基于海量数据采集 汇聚 分析的服务体系 支撑制造资源泛在连接 弹性供给 高效配置的工业云平台 其本质是通过构建精准 实时 高效的数据采集互联体系 建立面向工业大数据存储 集成 访问
  • 如何通过客户端访问内网Redis服务?

    场景 生成内网的redis一般不会开放外网访问权限 为了安全 作为开发者又想通过客户端进行访问内网redis怎么办 解决方法 领导给出了解决方案 感觉太好用了 分享给大家 一般Redis客户端 我用的是Redis Desk Manager客
  • Opencv中特征点Keypoint的解读(特征点与坐标的相互转换)

    Opencv中特征点Keypoint的解读 特征点的生成 特征点到坐标的转换 坐标到特征点的转换 在我们学习特征点检测时 使用特征点检测器 比如ORB和SIFT生成特征点 FAST和SURF好像已经申请专利 较新版本可能用不了 通常生成的特
  • 用最新版Android studio 打包发布cocos2dx c++(3.17.2)

    在参考了大量网上资料之后 得出的经验 工具和软件 1 cocos2dx 3 17 2 Cocos引擎 游戏开发引擎Cocos 引擎官方网站 Cocos Creator Cocos2d x 开源免费跨平台游戏开发引擎https www coc
  • Solidity-值类型(一)

    文章目录 前言 写本文的目的是记录自己对于区块链技术的学习 方便日后查漏补缺 solidity是一门智能合约语言 是静态类型语言 支持继承等特性 solidity中不存在 undefine和null的概念 每个新声明的变量都会根据其类型赋予
  • 电动机异常ESP32和TinyML边缘检测

    该项目演示如何使用 Python 训练两种不同的机器学习模型来检测电动机中的异常情况 第一个模型依赖于马哈拉诺比斯距离的经典机器学习技术 第二个模型是使用 TensorFlow 和 Keras 创建的自动编码器神经网络 数据是使用贴在吊扇上
  • watch跟computed的区别

    大家好 我是大帅子 今天给大家讲一下watch跟computed的区别 下面我们直接开始吧 功能上 computed是计算属性 watch是监听一个值的变化 然后执行对应的回调 是否调用缓存 computed中的函数所依赖的属性没有发生变化
  • UFT工具简介

    UFT UFT是一种自动测试工具 使用UFT的目的是想用它来执行重复的自动化测试 主要是用于回归测试和测试同一软件的新版本 因此你在测试前要考虑好如何对应用程序进行测试 例如要测试哪些功能 操作步骤 输入数据和期望的输出数据等 基本功能 U
  • ImageAI (一) 使用Python快速简单实现图像内容预测 Image Prediction

    简介 ImageAI是一个python的库 它能使开发人员用简单几行代码构建具有深度学习和计算机视觉功能的应用程序和系统 它是由Moses Olafenwa和John Olafenwa两位开发并维护 具体git地址 https github
  • Flink1.11内存机制之进程内存及TaskManager内存

    问题导读 1 如何配置 Flink 进程的内存 2 如何配置总内存 3 如何配置 TaskManager 内存 4 如何配置堆内存和托管内存 Apache Flink 基于 JVM 的高效处理能力 依赖于其对各组件内存用量的细致掌控 考虑到
  • C++11中的右值引用及move语义编程

    C 11中的右值引用及move语义编程 C 0x中加入了右值引用 和move函数 右值引用出现之前我们只能用const引用来关联临时对象 右值 造孽的VS可以用非const引用关联临时对象 请忽略VS 所以我们不能修临时对象的内容 右值引用
  • 迪杰斯特拉 (Dijkstra)算法求最短路径问题

    目录 算法介绍 应用实例 算法步骤 代码实现 算法介绍 迪杰斯特拉 Dijkstra 算法是典型最短路径算法 用于计算一个结点到其他结点的最短路径 它的主要特点是以起始点为中心向外层层扩展 广度优先搜索思想 直到扩展到终点为止 应用实例 算
  • 基于SpringBoot和协同过滤算法的体育商城系统的实现

    最近帮小伙伴做了个基于SpringBoot和协同过滤算法的体育商城系统 文章目录 一 SpingBoot介绍 二 协同过滤算法介绍 三 系统功能需求 四 系统功能演示 五 系统核心代码演示 一 SpingBoot介绍 现如今后台开源框架主流
  • CSS3之border-sizing属性功能get!

    今天在进行文本框样式编写的过程中遇到一个问题 当我将input元素的宽度定义为 width 100 之后 如果再增加 padding 或者 border 则文本框会溢出父容器 是向外扩张的 解决方法 加入box sizing border
  • 管道/消息队列/共享内存

    管道通信 PIPE 管道通信方式的中间介质是文件 通常称这种文件为管道文件 两个进程利用管道文件进行通信时 一个进程为写进程 另一个进程为读进程 写进程通过写端 发送端 往管道文件中写入信息 读进程通过读端 接收端 从管道文件中读取信息 两