我开始玩 mmap 了。我正在尝试创建一个示例工作区,然后将其扩展到实际案例。
这就是我想要实现的目标:
流程1:
- mmap一个文件(实际上是一个设备,但是用文本文件生成一个例子是可以的)
进程2:(不是从进程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(使用前将#替换为@)