【发布时间】:2010-11-10 13:03:27
【问题描述】:
需要使用 IPC 将大量数据 (200kb+) 从子进程传递到 OS X 10.4 及更高版本的父进程,我阅读了 Unix 上的共享内存,特别是 System V 和 POSIX 共享内存机制。然后我意识到 mmap() 可以与 MAP_ANON 和 MAP_SHARED 标志一起使用来做类似的事情(或者只使用 MAP_SHARED 标志,如果我不介意创建常规文件)。
我的问题是,有什么理由不只使用 mmap()?看起来简单多了,内存仍然是共享的,如果我使用 MAP_ANON 就不必创建真正的文件。我可以在父进程中创建文件,然后 fork() 和 exec() 子进程并在子进程中使用它。
问题的第二部分是,这种方法不够用的原因是什么,必须使用 SysV 或 POSIX 共享内存机制?
请注意,我计划使用其他通信所需的管道进行同步,即父级通过管道请求数据,子级将其写入共享内存,并通过管道响应它准备好。不涉及多个读者或作者。便携性不是首要任务。
【问题讨论】:
-
如果我使用 MAP_ANON。我可以在父进程中创建文件,然后 fork() 和 exec() 子进程并在子进程中使用它。 -> 你设法以某种方式完成了这个吗?据我所知,没有办法让 mmap()ed 内存在 exec 中存活下来。它确实可以在 fork 中存活,但不能在 exec 中存活。
标签: macos unix shared-memory