Linux操作系统之进程间通讯—共享内存与消息队列

2023-11-07

一、共享内存

1、共享内存的原理

共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址,就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了数据,所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。由于它并未提供同步机制,所以我们通常需要用其他的机制来同步对共享内存的访问。
在这里插入图片描述
在这里插入图片描述
总结:多个进程在物理内存上,有一份内存空间是共享的,多个进程在各自的逻辑地址空间写入数据,或者获取数据,使用同一个空间,不需要数据的拷贝。

2、共享内存的实现

在这里插入图片描述
在这里插入图片描述

共享内存基本操作函数
shmget 创建、获取
shmat 映射
shmdt 断开映射
shmctl 删除共享内存

1.a.c向共享内存中写入数据
在这里插入图片描述

2.b.c向共享内存中读入数据
在这里插入图片描述
3.sem.h 引入信号量
在这里插入图片描述
4.sem.c 文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、消息队列

1、消息队列原理

自身就带有同步机制的有:消息队列、管道
在这里插入图片描述

在这里插入图片描述

2、消息队列实现

a.c文件向消息队列发送数据
在这里插入图片描述
b.c向消息队列读取数据
在这里插入图片描述

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

Linux操作系统之进程间通讯—共享内存与消息队列 的相关文章

  • Linux shell 根据第二列对文件进行排序?

    我有一个这样的文件 FirstName FamilyName Address PhoneNumber 如何按 FamilyName 排序 如果这是 UNIX sort k 2 file txt 您可以使用多个 k用于对多列进行排序的标志 例
  • 内核驱动程序从用户空间读取正常,但写回始终为 0

    因此 我正在努力完成内核驱动程序编程 目前我正在尝试在应用程序和内核驱动程序之间构建简单的数据传输 我使用简单的字符设备作为这两者之间的链接 并且我已成功将数据传输到驱动程序 但我无法将有意义的数据返回到用户空间 内核驱动程序如下所示 in
  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414
  • Bash:检查是否给出了参数(例如是否有参数“-a”?)

    我有一个脚本 它应该接受 2 个参数 s 和 d 如果未给出 d 参数 我想删除我的调试文件 与 s 相同 如何检查 1 或 2 是否为 s 或 d 舒尔有两个参数 我可以做到 蛮力 if test 1 d test 2 d then rm
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • CCF201612-2工资计算

    试题编号 201612 2 试题名称 工资计算 时间限制 1 0s 内存限制 256 0MB 问题描述 问题描述 小明的公司每个月给小明发工资 而小明拿到的工资为交完个人所得税之后的工资 假设他一个月的税前工资 扣除五险一金后 未扣税前的工
  • 数据结构C语言-单链表的定义、销毁及增删改查

    声明部分 typedef struct Lnode int data struct Lnode next Lnode LinkList LinkList单链表 以下操作均为带头结点的单链表 LinkList CreateLinkList 创
  • 中国存储芯片产业“炮台”已搭起

    2015年以来 伴随着大陆在集成电路产业发展的高度关注与持续投入 大陆IC产业链结构正日趋完善 各产业链环节调控效果初显 尤其在晶圆制造端 浩浩荡荡的国际各路大军纷纷登陆中国 国内厂商积极重组扩张 在此期间 中国存储芯片产业也经历了从无到有
  • Python DataFrame写入OACLE数据库

    分析工具与数据库交互 Python 直接把DataFrame写入OACLE数据库 python 把模型跑出来的结果写入csv txt等文档中 不便于后续的存储和分析 于是乎我想把它直接写入数据库 但是问题来了 百度了很多写法 都是需要把Da
  • 机器学习基础(六)——逻辑回归Logistic Regression

    文章目录 Logistic Regression 1 基础概念 1 1 对数似然损失函数 1 2 完整的损失函数 2 逻辑回归算法API 3 LogisticRegression回归案例 Logistic Regression 1 基础概念
  • 数组转树方法(v起来)

    一 为什么需要数组转树 当我们做后台管理系统时难免会遇到关于公司组织架构这样的模块 一个部门下会有好几个小部门 这时我们就可以运用树形图来更好地进行查看 下面简单举例 展开前 展开后 二 下面使用两种方法进行数组转树 1 非递归方式 把平铺
  • 稳健性检验套路汇总!(持续更新......)

    稳健性检验通常有三种 一 改变变量的代理 更换自变量 更换因变量的构造方法 二 改变估计方法 如考虑内生性等 工具变量法 2sls估计法 GMM估计法 DID估计法 三 改变模型设定 增减变量 第四种就是改变样本 从全国总体到全国面板 到世
  • 判断当前是否是锁屏状态

    KeyguardManager mKeyguardManager KeyguardManager getSystemService KEYGUARD SERVICE if mKeyguardManager inKeyguardRestric
  • JDBC连接数据库出现错误:Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol

    JDBC连接数据库出现错误 Caused by javax net ssl SSLHandshakeException No appropriate protocol protocol is disabled or cipher suite
  • 数学建模(十)-------关联分析类--------回归分析

    https www cnblogs com sumuncle p 5647722 html 七种回归模型 感觉是机器学习中特别是模式识别的数学基础 所以还是值得看一下的 https www cnblogs com nxld p 612323
  • Easyx教程(一)——下载及创建窗口

    关于用C 做2D游戏 C 并没有提供专门的库 但是我们可以借助第三方库来实现2D游戏的制作 例如 cocos2d Easyx OpenGL 今天就给大家推荐其中一个我认为最简单 最好用的2D游戏引擎 Easyx 一 Easyx简介 Easy
  • 他文献查到凌晨两点,我用Python十分钟搞定!

    大家好 我是爱学习的王饱饱 对于应届毕业生来说 今年一定是难熬的一年 本来找工作 写论文就已经是两座大山了 还要面临论文无指导的额外压力 这让我想到了去年毕业的表弟 当时他为了完成论文 摔烂了三个鼠标 为了找一些数据资料 他经常需要同时点开
  • 关于选择FFmpeg的“git master build”还是“release build”

    小问题 写下来备忘 之前在 使用FFmpeg合并 解密 下载m3u8文件转为mp4格式 当中 以及在 可以提高DeepFaceLab DeepFake 合成最终视频速度的方法 当中 都提到了FFmpeg 大家都在用的非常好的工具 我是从官方
  • Flutter插件开发-(进阶篇)

    一 概述 Flutter也有自己的Dart Packages仓库 插件的开发和复用能够提高开发效率 降低工程的耦合度 像网络请求 http 用户授权 permission handler 等客户端开发常用的功能模块 我们只需要引入对应插件就
  • ell服务器专用pe系统,GitHub - elltor/smpe-admin: 后端通用开发框架

    SMPE ADMIN后台管理系统 项目简介 一个基于EL ADMIN Spring Boot 2 1 0 Mybatis Plus JWT Spring Security Redis Vue的前后端分离的后台管理系统 开发文档 待完善 默认
  • 集群架构总结(Kafka、redis,zk,es)

    ZK集群 1 zk集群节点可见 通过配置文件达到节点间相互可见 2 为什么集群设置奇数个节点 1 奇数节省资源 zk容错 zk节点剩下的个数必须要大于挂掉的节点 大于n 2 整个集群才可用 5节点容错2个 6节点容错2个 2 奇数节点集群可
  • CPPUTest 单元测试框架(针对 C 单元测试的使用说明)

    CPPUTest 虽然名称上看起来是 C 的单元测试框架 其实它也是支持测试 C 代码的 本文主要介绍用CPPUTest来测试 C 代码 C 没用过 平时主要用的是C C 相关的内容都省略了 本文基于 debian v7 6 x86 64
  • 2023零基础 Python 学习路线图,转行学Python让你少走弯路~

    这是我刚开始学习python时的一套学习路线 从入门到上手 不敢说精通 哈哈 希望对大家有帮助哈 大家需要高清得python学习路线可以私信我 学习 即可获取 一 Python入门 环境搭建 变量 数据类型 二 Python运算符 条件结构
  • 小程序常见的面试题

    小程序常见的面试题 1 简单描述下微信 程序的相关 件类型 答 微信 程序项 结构主要有四个 件类型 如下 WXML 是框架设计的 套标签语 结合基础组件 事件系统 可以构建出 的结构 内部主要是微信 定义的 套组件 WXSS WeiXin
  • Linux操作系统之进程间通讯—共享内存与消息队列

    文章目录 一 共享内存 1 共享内存的原理 2 共享内存的实现 三 消息队列 1 消息队列原理 2 消息队列实现 一 共享内存 1 共享内存的原理 共享内存为多个进程之间共享和传递数据提供了一种有效的方式 共享内存是先在物理内存上申请一块空