У меня есть предварительно созданная библиотека пользовательского пространства, в которой есть 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);
Таким образом, другой процесс мог бы писать прямо в буфер библиотеки. (Синхронизация между процессами уже реализована, поэтому проблем нет).