IPCを使用して、子プロセスからOS X 10.4以降の親プロセスに大量のデータ(200kb +)を渡す必要があるため、Unix上の共有メモリ、特にSystem VとPOSIX共有メモリのメカニズムを読み上げます。それで、mmap()がMAP_ANONとMAP_SHAREDフラグを使って同様のことをすることができることに気付きました(あるいは、通常のファイルが作成されても気にしない場合はMAP_SHAREDフラグを指定するだけです)。SysVまたはPOSIX共有メモリとmmap()を使う理由は何ですか?
私の質問は、mmap()を使用しない理由がありますか?はるかに簡単ですが、メモリはまだ共有されており、MAP_ANONを使用すると実際のファイルを作成する必要はありません。親プロセスでファイルを作成し、fork()とexec()を子プロセスで使用することができます。
第二の問題は、このアプローチが十分ではなく、SysVまたはPOSIX共有メモリメカニズムを使用する必要がある理由は何か。
私は、他の通信に必要なパイプを使用して同期を行うことを計画していました。つまり、親はパイプ上のデータを要求し、子はそれを共有メモリに書き込み、その準備ができたパイプで応答します。複数の読者またはライターは関与していません。移植性は優先事項ではありません。
mmapなしでposix_shmを使用することはできません。その部分はナンセンスです。しかし、最初の段落で正しいですが、親/子関係がないときにposix_shmがmmapを有効にします。 –