使用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