从另一个进程访问 mmap 内存
Access mmap memory from another process
我开始玩 mmap。我正在尝试创建一个示例工作区,然后将其扩展到真实案例。
这就是我想要实现的:
进程 1:
- mmap一个文件(其实是一个设备,不过用文本文件生成例子也可以)
进程 2:(不是来自进程 1;只是一个独立的进程)
- 读取进程1映射的内存
- 更改一些位
- 写入新文件
我已经阅读了几个示例和文档,但我仍然没有找到如何实现这一点。我缺少的是:
- 进程 2 如何在对打开的文件一无所知的情况下访问进程 1 映射的内存?
- 如何将 mmap 内容放入新文件中?我想我必须 ftruncate 一个新文件,mmap 这个文件和 memcpy 进程 1 内存映射的内容到进程 2 内存映射(然后 msync)
附带信息,我在两个进程之间打开了一个消息队列,因此它们可以在需要时共享一些消息(例如内存 address/size,...)。
有什么提示吗?
提前致谢!
混合
此答案认为您正尝试在 linux/unix 上执行此操作。
how can process 2 access the memory mapped by process 1, without knowing anything about the opened file?
进程 1 将标志 MAP_SHARED.
传递给 mmap[1]
您可以:
- A) 使用 unix 域套接字共享文件描述符[2]。
- B) 发送
使用您在末尾提到的队列的文件名
你的留言。
进程 2 使用标志 MAP_SHARED 打开 mmap。对进程 1 中映射内存的修改对于进程 2 是可见的。如果您需要精细控制进程 1 的更改何时显示到进程 2,您应该使用 msync[3]
进行控制
how can I put the mmap content in a new file? I suppose I have to
ftruncate a new file, mmap this file and memcpy the content of process
1 memory map to process 2 memory map (then msync)
为什么不将 mmaped 内存作为常规内存写入?
[1]http://man7.org/linux/man-pages/man2/mmap.2.html
[2]Portable way to pass file descriptor between different processes
我开始玩 mmap。我正在尝试创建一个示例工作区,然后将其扩展到真实案例。
这就是我想要实现的:
进程 1:
- mmap一个文件(其实是一个设备,不过用文本文件生成例子也可以)
进程 2:(不是来自进程 1;只是一个独立的进程)
- 读取进程1映射的内存
- 更改一些位
- 写入新文件
我已经阅读了几个示例和文档,但我仍然没有找到如何实现这一点。我缺少的是:
- 进程 2 如何在对打开的文件一无所知的情况下访问进程 1 映射的内存?
- 如何将 mmap 内容放入新文件中?我想我必须 ftruncate 一个新文件,mmap 这个文件和 memcpy 进程 1 内存映射的内容到进程 2 内存映射(然后 msync)
附带信息,我在两个进程之间打开了一个消息队列,因此它们可以在需要时共享一些消息(例如内存 address/size,...)。
有什么提示吗?
提前致谢!
混合
此答案认为您正尝试在 linux/unix 上执行此操作。
how can process 2 access the memory mapped by process 1, without knowing anything about the opened file?
进程 1 将标志 MAP_SHARED.
传递给 mmap[1]您可以:
- A) 使用 unix 域套接字共享文件描述符[2]。
- B) 发送 使用您在末尾提到的队列的文件名 你的留言。
进程 2 使用标志 MAP_SHARED 打开 mmap。对进程 1 中映射内存的修改对于进程 2 是可见的。如果您需要精细控制进程 1 的更改何时显示到进程 2,您应该使用 msync[3]
进行控制how can I put the mmap content in a new file? I suppose I have to ftruncate a new file, mmap this file and memcpy the content of process 1 memory map to process 2 memory map (then msync)
为什么不将 mmaped 内存作为常规内存写入?
[1]http://man7.org/linux/man-pages/man2/mmap.2.html
[2]Portable way to pass file descriptor between different processes