我需要在OS X 10.4及更高版本上使用IPC将子进程中的大量数据(200kb +)传递给父进程,我阅读了Unix上的共享内存,特别是System V和POSIX共享内存机制。然后我意识到,mmap()可以与MAP_ANON和MAP_SHARED标志一起使用来做类似的事情(或者只是使用MAP_SHARED标志,如果我不介意创建常规文件)。为什么使用SysV或POSIX共享内存vs mmap()?
我的问题是,是否有任何理由不使用mmap()?看起来更简单一些,内存仍然是共享的,如果我使用MAP_ANON,它不需要创建一个真实的文件。我可以在父进程中创建文件,然后fork()和exec()子进程,并在子进程中使用它。
问题的第二部分是,这是什么原因,这种方法是不够的,一个将不得不使用SysV或POSIX共享内存机制?
注意,我打算做使用我需要其他通信管道同步,即父母在管道上请求数据,孩子其写入共享内存,并响应在管道,它的准备。没有涉及多个读者或作者。可移植性不是优先事项。
你不能使用posix_shm没有mmap,那部分是无稽之谈。不过,在第一段中你是正确的,posix_shm在没有父/子关系时启用mmap。 – 2013-12-24 23:36:41