从另一个进程访问 mmap 内存

2024-01-20

我开始玩 mmap 了。我正在尝试创建一个示例工作区,然后将其扩展到实际案例。

这就是我想要实现的目标:

流程1:

  • mmap一个文件(实际上是一个设备,但是用文本文件生成一个例子是可以的)

进程2:(不是从进程1复制而来;只是一个独立的进程)

  • 读取进程1映射的内存
  • 改变一些位
  • 将其写入新文件

我已经阅读了几个示例和文档,但我仍然没有找到如何实现这一点。我缺少的是:

  • 进程 2 如何在不知道有关打开文件的任何信息的情况下访问进程 1 映射的内存?
  • 如何将 mmap 内容放入新文件中?我想我必须ftruncate一个新文件,mmap这个文件并memcpy进程1内存映射的内容到进程2内存映射(然后msync)

侧面信息,我在两个进程之间打开了一个消息队列,因此它们可以在需要时共享一些消息(例如内存地址/大小,...)。

有什么提示吗?

提前致谢!

MIX


这个答案认为你正在尝试在 linux/unix 上做这些事情。

进程 2 如何在不知道有关打开文件的任何信息的情况下访问进程 1 映射的内存?

进程 1 将标记 MAP_SHARED 传递给 mmap[1]。

You can:

  • A) 使用 unix 域套接字共享文件描述符[2]。
  • B) 发送 使用您在末尾提到的队列的文件名 您的留言。

进程 2 使用标志 MAP_SHARED 打开 mmap。对进程 1 中映射内存的修改对于进程 2 是可见的。如果您需要精细控制进程 1 的更改何时显示到进程 2,您应该使用 msync[3] 进行控制

如何将 mmap 内容放入新文件中?我想我必须 ftruncate 一个新文件,mmap 该文件并 memcpy 进程的内容 1 个内存映射到进程 2 个内存映射(然后是 msync)

为什么不使用 write 将映射内存作为常规内存写入?

[1]http://man7.org/linux/man-pages/man2/mmap.2.html http://man7.org/linux/man-pages/man2/mmap.2.html

[2]在不同进程之间传递文件描述符的可移植方式 https://stackoverflow.com/questions/909064/portable-way-to-pass-file-descriptor-between-different-processes

[3]http://man7.org/linux/man-pages/man2/msync.2.html http://man7.org/linux/man-pages/man2/msync.2.html

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

从另一个进程访问 mmap 内存 的相关文章

随机推荐

  • 极坐标数据框中每组的样本?

    我正在寻找类似的功能 df groupby column agg sample 10 这样我就可以从每组中随机选择十个左右的元素 这是专门为了让我可以读取 LazyFrame 并使用每个组的小样本而不是整个数据帧 Update 一种近似解是
  • 源代码无法在 shell 脚本中运行

    我在 shell 脚本中有以下行 source bash profile 它没有错误 但它也没有做任何我可以看到的事情 它没有像我期望的那样重新加载我的别名 但是 在 shell 脚本所在的同一文件夹中 如果我只是从 shell 运行命令
  • 什么是引擎盖下的石膏[重复]

    这个问题在这里已经有答案了 可能的重复 C as 强制转换与经典强制转换 https stackoverflow com questions 4926677 c sharp as cast vs classic cast 我想知道当我做类似
  • SFINAE:“enable_if 不能用于禁用此声明”

    为什么我不能使用enable if在以下情况下 我想检测我的模板化对象是否具有成员函数notify exit template
  • 修改类以封装而不是继承

    我所使用的代码库具有一个继承自的数据库类MDB2 http pear php net package MDB2 这构成了正在使用的 MVC 框架 自定义构建的事务 的基础 而模型又继承自 db 我相信你们中的一些人已经注意到 这会导致一个相
  • 如何安全地检查节点是否为空? (Symfony 2 爬虫)

    当我尝试从页面中获取一些不存在的内容时 我发现了此错误 The current node list is empty 500 Internal Server Error InvalidArgumentException 如何安全地检查该内容
  • 制作文件有问题吗?

    为什么当我用 makefile 编译程序时我得到 gcc Wall pedantic src main c o wk main o src main c 9 11 warning C style comments are not allow
  • 如何在 IE 和 Firefox 中解析 JavaScript 中的 XML?

    我正在尝试编写一段代码来解析 IE 和 Firefox 中的 javascript 以下在 IE 中有效 在 Firefox 中也能正常运行 function XmlDom sXml var oXml if window ActiveXOb
  • 在 Flask-migrate ValueError 中:位置 15 处的连接字符串中的插值语法无效

    我在用flask migrate使用flask sqlalchemy 在flask 中创建和迁移数据库 一切都工作正常 直到我更改了包含 的数据库用户密码 然后它停止工作 所以我根据以下内容更新了我的代码当密码包含特殊字符时写入连接字符串
  • 在Python中使用递归和map

    我正在尝试学习函数式编程概念 练习 使用 map reduce 展平嵌套列表 我的代码 lists 1 2 3 4 5 6 7 8 9 def flatten lists return map lambda x flatten x if i
  • Rails 服务器启动后退出

    我想开始使用 Rails 我正在使用 git bash 当我尝试启动 Rails 服务器时 出现此错误 我已经尝试到处搜索 但找不到这个问题的解决方案 我为此下载了 ruby 3 0 0 谢谢 gt Booting Puma gt Rail
  • QSqlDatabase:Ubuntu 15.04 64 位上未加载 QMYSQL 驱动程序

    在 Ubuntu 15 04 64 位中 我安装了 Qt5 6 在线安装程序 在尝试将开发环境从 Windows 7 迁移到 Linux 时 我遇到了以下问题 SqlDatabase QMYSQL driver not loaded 下列的
  • 泛型类型的签名约束

    struct S int a int b void fun T T t I want fun跟 共事S仅有的 签名约束是什么样的 我做不到fun的成员S 与void fun T T t if is T S I get Error struc
  • Postgres 跨阵列频率计数

    我有一列文本 如何获取列中所有对象的频率计数 例子 col a a b a b a 输出应该是 col a count a 3 b 2 我的查询 with all tags as select array agg c from select
  • 通过 RStudio 使用 RMySQL 的 SSH 隧道

    我是使用 Mac OS X 使用 RStudio 的 R 新手 我成功地使用sequel Pro来查看DB 就像这样 我将 dbConnect 与 RMySQL 一起使用 将 DBI 下面的代码 与 RStudio 一起使用 library
  • 如何从嵌套对象字面量访问外部成员?

    在下面的代码中 可以从嵌套对象字面量访问 x 成员吗 var outer x 0 inner a x 1 x is undefined b outer x 1 outer is undefined c this x 1 This doesn
  • Kubernetes 部署。如何更改容器环境变量以进行滚动更新?

    以下是我在 google 上使用 kubernetes 的方式 我有一个节点应用程序 比方说图书门户 节点应用程序正在使用配置的环境变量 Step1 我创建了 docker 文件并推送 gcr io
  • 如何在 Typescript/Webpack 的 Bitbucket Pipelines 中增加 NodeJS 堆(--max-old-space-size)?

    我在无服务器 TypeScript 项目中的 webpack 打包步骤中遇到内存问题 我努力了 增加内存限制 npm 包无济于事 从 npm run 脚本调用以下命令 通过bitbucket pipelines yml直接调用以下命令 no
  • 取消选择所有 jquery 选项卡时遇到问题

    我设置了一些 jQuery 选项卡 一开始没有选择任何选项卡 如下所示 tabs tabs selected 1 然后我还有一个单独的链接 按下该链接需要取消选择所有选项卡 deselectButton click function tab
  • 从另一个进程访问 mmap 内存

    我开始玩 mmap 了 我正在尝试创建一个示例工作区 然后将其扩展到实际案例 这就是我想要实现的目标 流程1 mmap一个文件 实际上是一个设备 但是用文本文件生成一个例子是可以的 进程2 不是从进程1复制而来 只是一个独立的进程 读取进程