我开始玩mmap了.我正在尝试创建一个示例工作区,然后将其扩展到实际案例.
这就是我想要实现的目标:
过程1:
流程2 :(不是从流程1中获取;只是一个独立的流程)
我已经阅读了几个示例和文档,但我仍然没有找到如何实现这一点.我缺少的是:
侧面信息,我在两个进程之间打开了一个消息队列,因此如果需要,它们可以共享一些消息(例如内存地址/大小,......).
任何提示?
提前致谢!
混合
这个答案认为您正在尝试在 linux/unix 上做这些事情。
进程 2 如何访问由进程 1 映射的内存,而不知道有关打开的文件的任何信息?
进程 1 将标志 MAP_SHARED 传递给 mmap[1]。
你可以:
进程 2 打开带有 MAP_SHARED 标志的 mmap。对进程 1 中 mmaped 内存的修改对于进程 2 是可见的。如果您需要精细控制从进程 1 到进程 2 的更改何时显示,您应该使用 msync[3] 来控制它
如何将 mmap 内容放入新文件中?我想我必须 ftruncate 一个新文件,mmap 这个文件和 memcpy 进程 1 内存映射的内容来处理 2 内存映射(然后 msync)
为什么不使用 write 将 mmaped 内存写为常规内存?
[1] http://man7.org/linux/man-pages/man2/mmap.2.html
[3] http://man7.org/linux/man-pages/man2/msync.2.html