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

2023-10-29

 

管道通信(PIPE)

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

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

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

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

消息通信(MESSAGE)

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

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

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

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


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

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

  • 检查 Unix 消息队列是否为空

    谁能告诉我如何检查消息队列中是否有消息 消息队列是在基于Linux的操作系统中用C语言实现的 我只是想检查在特定时间消息队列中是否有消息 只需使用以下命令即可检查消息数量 如果有 msgctl 函数 并在返回时检查 msqid ds 结构
  • 用户的完整 UNIX 用户名

    想知道您是否知道是否有一种巧妙的方法可以从 shell 获取完整的用户名 示例 如果我的 UNIX 用户名是 froyo 那么我想获取我的全名 在本例中 如系统中注册的那样 froyo Abhishek Pratap Finger 命令可以
  • 直接向pbs脚本传递参数

    有没有办法在提交作业之前直接将参数传递给 pbs 脚本 我需要循环遍历由不同数字表示的文件列表 并应用脚本来分析每个文件 我能想到的最好的办法如下 bin sh for i 1 i lt 10 i do export FILENUM i q
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 带有存储在文件中的通配符的 grep

    我希望 grep 通过读取需要从文本文件中过滤掉的内容来过滤掉行 这是我给 grep 的内容 它存储在foo txt Users 1337 X Users 1337 R Users 1337 W 这是它应该过滤的内容 它存储在bar txt
  • 如何在 sed 中用“pwd”的结果替换令牌?

    我正在尝试做这样的事情 sed s REPLACE WITH PATH pwd 不幸的是 我出错了 sed e expression 1 char 23 unknown option to s 为什么会发生这种情况 您需要使用不同的字符而不
  • XAMPP Windows 上的 Php Cron 作业

    嗯 我是这个词的新手CRON 据我所知 这是一个Unix安排特定操作在定义的时间间隔后执行的概念 我需要运行一个php文件 每小时更新一次数据库 但我的困惑在于安排执行 我在用XAMPP用于 Windows 7 上的本地开发测试 我发现了什
  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • 在unix、bash中合并csv文件

    我有一些 csv 文件 其格式如下 测试1 csv field port1 a1 0 2 a2 0 3 a3 0 6 测试2 csv field port2 b1 0 5 b2 0 6 b3 0 7 b4 0 1 b5 0 5 测试3 cs
  • BASH 中带有千位分隔符的数字格式

    我有一个号码12343423455 23353 我想用千位分隔符格式化数字 所以输出将是12 343 423 455 23353 printf 3f n 12345678 901 12 345 678 901
  • grep 查找 Unix 中的特殊字符

    我有一个日志文件 application log 其中可能包含以下多行普通和特殊字符字符串 Q 我想搜索包含这个特殊字符串的行号 grep Q application log 上述命令不返回任何结果 获取行号的正确语法是什么 Tell gr
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 查找当前打开的文件句柄数(不是 lsof )

    在 NIX系统上 有没有办法找出当前正在运行的进程中有多少个打开的文件句柄 我正在从正在运行的进程中寻找在 C 中使用的 API 或公式 在某些系统上 见下文 您可以在 proc pid fd 中对它们进行计数 如果不属于其中之一 请参阅下
  • import java 导入错误:没有名为 java 的模块

    我似乎遇到了障碍 根本无法解决这个问题 任何人都可以帮我弄清楚为什么我无法导入 java 模块吗 Error Traceback most recent call last File datasource config py line 3
  • 使用 Bash 按进程名称检查 Mac 进程是否正在运行

    如何使用 Bash 脚本中的进程名称检查 Mac OS X 上的进程是否正在运行 我正在尝试编写一个 Bash 脚本 如果进程已停止 它将重新启动进程 但如果进程仍在运行 则不执行任何操作 解析这个 ps aux grep v grep g
  • 使用 unix ksh shell 脚本或 perl 脚本监视文件夹中的新文件并触发 perl 脚本

    我已经在谷歌搜索和溢出了一段时间 但找不到任何可用的东西 我需要一个脚本来监视公共文件夹并在创建新文件时触发 然后将文件移动到私有位置 我有一个 samba 共享文件夹 exam ple 在 UNIX 上映射到X 在窗户上 在某些操作中 t
  • 为什么 ls -l 中的“总计”加起来不等于列出的总文件大小? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么是total在输出中ls l打印为64并不是26078列出的所有文件的总数是多少 ls l test ls total 64 rw
  • 在Unix下,判断执行该程序的用户是否是root?

    我正在编写一个 rake 脚本 并希望检测 如果可能的话 使用 Ruby 而不是 bash 执行 rake 脚本的用户是否具有 root 权限 如果它不是 root 那么我想终止脚本 Use uid http www ruby doc or
  • 在进行 sem_timedwait 时,我将如何应对系统时间的变化?

    假设我有一个使用的程序sem timedwait为了等待 100 毫秒 获取当前时间 添加 100 毫秒 将结果用作abs timeout 参见手册页 http man7 org linux man pages man3 sem wait
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12

随机推荐

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