У меня есть встроенная библиотека пользовательского пространства, которая имеет API по строкам
void getBuffer (void **ppBuf, unsigned long *pSize);
void bufferFilled (void *pBuf, unsigned long size);
Идея состоит в том, что мой код запрашивает буфер из библиотеки lib, заполняет его материалом, а затем передает его обратно в lib.
Я хочу, чтобы другой процесс мог заполнить этот буфер. Я могу сделать это, создав новый общий буфер с помощью shm */shm_ * API, попробуем выполнить другой процесс, а затем скопируем его в буфер lib в локальном процессе lib, но у этого есть накладные расходы дополнительного (потенциально большого) копия.
Есть ли способ обмена памятью, которая УЖЕ была отображена для процесса? например, что-то вроде:
[local lib process]
getBuffer (&myLocalBuf, &mySize);
shmName = shareThisMemory (myLocalBuf, mySize);
[other process]
myLocalBuf = openTheSharedMemory (shmName);
Таким образом, другой процесс может напрямую записываться в буфер lib. (Синхронизация между процессами уже решена, поэтому никаких проблем нет).