需要使用 IPC 将大量数据(200kb+)从子进程传递到 OS X 10.4 及更高版本的父进程,我阅读了 Unix 上的共享内存,特别是 System V 和 POSIX 共享内存机制。然后我意识到 mmap() 可以与 MAP_ANON 和 MAP_SHARED 标志一起使用来做类似的事情(或者只使用 MAP_SHARED 标志,如果我不介意创建常规文件)。
我的问题是,有什么理由不只使用 mmap() 吗?看起来简单多了,内存仍然是共享的,如果我使用 MAP_ANON 就不必创建真实文件。我可以在父进程中创建文件,然后 fork() 和 exec() 子进程并在子进程中使用它。
问题的第二部分是,这种方法不够用的原因是什么,必须使用 SysV 或 POSIX 共享内存机制?
请注意,我计划使用其他通信所需的管道进行同步,即父级通过管道请求数据,子级将其写入共享内存,并通过管道响应它准备好。不涉及多个读者或作者。便携性不是优先事项。