創建內存映射分三步:CreateFile打開文件,CreateFileMapping創建內存映射內核對象,MapViewOfFile將內存映射對象映射到當前應用程序的地址空間(即獲得內存映射指針)。如果內存映射不與硬盤上的文件相關聯的話可以省略第一步,CreateFileMapping第一個參數設爲INVALID_HANDLE_VALUE。eg:
HANDLE hFile = CreateFile("FileName", GENERIC_READ | GENERIC_WRITE, 0/*FILE_SHARE_READ | FILE_SHARE_WRITE*/, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFileMapping = CreateFileMapping(hFile/*INVALID_HANDLE_VALUE*/, NULL, PAGE_READWRITE/*PAGE_READONLY*/, 0, 0, "MappingName");
if (!hFileMapping)
{
//error
CloseHandle(hFile);
}
pFileMapping = (char*)MapViewOfFile(hFileMapping, FILE_MAP_READ/*FILE_MAP_ALL_ACCESS*/, 0, 0, 0);
if (!pFileMapping)
{
//error
CloseHandle(hFileMapping);
CloseHandle(hFile);
}
關閉內存映射:
if(pFileMapping)
{
UnmapViewOfFile(pFileMapping);
pFileMappingDBF = NULL;
}
CloseHandle(hFileMapping);
CloseHandle(hFile);
打開一個現有的內存映射分兩步:OpenFileMapping打開內存映射,MapViewOfFile將內存映射對象映射到當前應用程序的地址空間(即獲得內存映射指針),eg:
hSharedMemory = OpenFileMapping(FILE_MAP_READ/*FILE_MAP_ALL_ACCESS*/, FALSE, "MappingName");
if(!hSharedMemory)
{
//error
}
pSharedMem = (char*)MapViewOfFile(hSharedMemory, FILE_MAP_READ/*FILE_MAP_ALL_ACCESS*/, 0, 0, 0);
if(!pSharedMem )
{
//error
CloseHandle(hSharedMemory);
}
關閉使用:
if(pSharedMem)
{
UnmapViewOfFile(pSharedMem);
pSrcSharedMem = NULL;
}
CloseHandle(hSharedMemory);