使用CreateFileMapping()
分配共享内存块并给出它的句柄。有些数据是用MapViewOfFile()
写的 - 叫它'源'拆分共享内存?
现在我想将共享内存拆分成许多小块并获得句柄。
有没有办法做到这一点,而不再调用CreateFileMapping()
并从'源'复制?
OpenFileMapping()
和MapViewOfFile()
适当的补偿工作,但问题是,在这种情况下,调用OpenFileMapping()
去访问其他进程写在“源”的数据,他们可能使用了错误的偏移被破坏的过程。
长话短说,我正在寻找类似OpenFileMapping(String name, UINT **offset**, ...)
最后一句是误导。
我真正想要做的是这样的:
<Host process>
HANDLE hShm = CreateFileMapping(INVALID_HANDLE_VALUE, ..., "shm");
void* pShm = MapViewOfFile(hShm);
UINT numShms = *(UINT*)pShm; // first 4 bytes stores number of shared memory blocks
HANDLE *hShmSplit = new HANDLE[numShms];
for(size_t i=0; i<numShms; i++) {
TCHAR shmName[32];
wsprintf(shmName, "shm%d", i);
// suppose offset is set
pShm+=offset;
hShmSplit[i] = *CreateFileMappingFromExistingMapping*(pShm, shmName);
}
CloseHandle(hShm); // no longer used
<Client process>
TCHAR* shmName="shm1";
HANDLE hShm = OpenFileMapping(shmName);
LPVOID p = MapViewOfFile(hShm);
// use shared memory
// Now the client process has access to shm1 but not to shm2, shm3, or other shm_x's.
...为什么你不能只传递指向中间的指针? – 2012-07-17 03:29:56
这是一个多进程项目,所以... – 2012-07-17 03:36:29
您如何期待其他进程获得打开的文件呢? – 2012-07-17 03:44:30