內存映射

  創建內存映射分三步: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);


發佈了74 篇原創文章 · 獲贊 24 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章