Совместное использование памяти между процессами с помощью mmap ()

Я использую Linux 2.6. У меня есть среда, в которой 2 процесса моделируют (используя общую память) обмен данными посредством простой реализации режима передачи сообщений.

I иметь клиентский процесс (разветвленный из родительского, которым является сервер), который записывает структуру (сообщение) в область отображения памяти, созданную (после вилки) с:

message * m = mmap (NULL, sizeof (message) , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0)

Затем этот указатель записывается в очередь (в форме связанного списка) в другую область разделяемой памяти, которая является общей для серверного и клиентского процесса (потому что if был создан до вилки с тем же кодом выше). Эта область затем читается сервером, который получает указатель на сообщение и обрабатывает его.

Проблема в том, что * m создается после fork (), и когда серверный процесс пытается получить доступ к указанной области памяти, я получаю ошибка сегментации. Можно ли присоединить эту область памяти к POST-разветвлению сервера после того, как клиент его создаст?

ПРИМЕЧАНИЕ: Я не хочу отображать указатель на сообщение перед разветвлением (а затем делиться им с сервером), потому что Обычно я не знаю, сколько сообщений клиент хочет отправить на сервер, а также может быть более одного клиентского процесса, поэтому я ' Я хочу создать новый блок совместно используемой памяти только тогда, когда клиенту нужно отправить сообщение, и отменить его отображение после того, как сервер получит это сообщение.

ПРИМЕЧАНИЕ: Это для академических целей: я знаю, что это не лучший способ чтобы решить эту проблему, но мне просто нужно следовать по этому пути.

Заранее спасибо!

19
задан Andrea Sprega 14 February 2011 в 11:17
поделиться