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