我需要在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