Необходимость использования IPC для передачи больших объемов данных (200 КБ +) из дочернего процесса в родительский на OS X 10.4 и выше, я прочитал об общей памяти в Unix, в частности, о механизмах разделяемой памяти System V и POSIX. Затем я понял, что mmap () можно использовать с флагами MAP_ANON и MAP_SHARED, чтобы сделать то же самое (или просто с флагом MAP_SHARED, если я не возражаю против создания обычного файла).
Мой вопрос: есть ли причина не использовать mmap ()? Кажется, все намного проще, память все еще используется совместно, и мне не нужно создавать настоящий файл, если я использую MAP_ANON. Я могу создать файл в родительском процессе, затем fork () и exec () дочернего процесса и использовать его в дочернем процессе.
Вторая часть вопроса заключается в том, что может быть причиной того, что такого подхода недостаточно, и нужно будет использовать механизмы разделяемой памяти SysV или POSIX?
Обратите внимание, что я планировал выполнить синхронизацию, используя каналы, которые мне нужны для другого обмена данными, то есть родитель запрашивает данные по каналу, потомок записывает их в общую память и отвечает по каналу, что он готов. Нет нескольких читателей или авторов, участвующих. Портативность не является приоритетом.