繁体   English   中英

从另一个进程访问mmap内存

[英]Access mmap memory from another process

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

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

过程1:

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

流程2 :(不是从流程1中获取;只是一个独立的流程)

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

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

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

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

任何提示?

提前致谢!

混合

这个答案认为你正试图在linux / unix上做这个东西。

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

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

您可以:

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

进程2使用标志MAP_SHARED打开mmap。 进程2中将显示对进程1中的mmaped内存的修改。如果需要对进程1的更改何时显示为进程2进行精确控制,则应使用msync控制它[3]

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

为什么只是不将写入的mmaped内存写为常规内存?

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

[2] 在不同进程之间传递文件描述符的便携方式

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM