У меня линукс 2.6. У меня есть среда, в которой 2 процесса имитируют (используя общую память) обмен данными через простую реализацию режима передачи сообщений.
У меня есть клиентский процесс (разветвленный от родителя, который является сервером), который записывает структуру (сообщение) в область отображения памяти, созданную (после разветвления) с помощью:
message *m = mmap(NULL, sizeof(message), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0)
Затем этот указатель записывается в очередь (в виде связанного списка) в другую область общей памяти, которая является общей для серверного и клиентского процессов (поскольку он был создан до разветвления с тем же кодом выше). Затем эта область считывается сервером, который получает указатель на сообщение и обрабатывает его.
Проблема в том, что *m создается после fork(), и когда серверный процесс пытается получить доступ к указанной ячейке памяти, я получаю ошибку сегментации. Можно ли присоединить эту область памяти к разветвлению POST сервера после того, как клиент его создаст?
ПРИМЕЧАНИЕ. Я не хочу сопоставлять указатель на сообщение перед разветвлением (а затем делиться им с сервером), потому что обычно я не знаю, сколько сообщений клиент хочет отправить на сервер, а также может быть больше чем 1 клиентский процесс, поэтому я хотел бы создать новый блок общей памяти только тогда, когда клиенту нужно отправить сообщение, и отключить его после того, как сервер получил это сообщение.
ПРИМЕЧАНИЕ. Это для академических целей: я знаю, что это не лучший способ решить эту проблему, но мне просто нужно следовать этому пути.
Заранее спасибо!