Unix: совместное использование уже отображенной памяти между процессами

У меня есть предварительно созданная библиотека пользовательского пространства, в которой есть API, аналогичный

void getBuffer (void **ppBuf, unsigned long *pSize);
void bufferFilled (void *pBuf, unsigned long size);

Идея в том, что мой код запрашивает буфер из библиотеки, заполняет его чем-то, а затем передает его обратно в библиотеку.

Я хочу, чтобы другой процесс мог заполнить этот буфер. Я могу сделать это, создав новый общий буфер с помощью API-интерфейсов shm * / shm_ *, заполнив его другим процессом, а затем скопировав его в буфер библиотеки в локальном процессе библиотеки, но это накладные расходы в виде дополнительных (потенциально больших) копия.

Есть ли способ совместно использовать память, которая УЖЕ была отображена для процесса? например, что-то вроде:

[local lib process]
getBuffer (&myLocalBuf, &mySize);
shmName = shareThisMemory (myLocalBuf, mySize);

[other process]
myLocalBuf = openTheSharedMemory (shmName);

Таким образом, другой процесс мог бы писать прямо в буфер библиотеки. (Синхронизация между процессами уже реализована, поэтому проблем нет).

14
задан j0k 21 October 2012 в 16:34
поделиться