内存映射

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


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/milanleon/article/details/79971914
个人分类: windows程序设计
上一篇函数对象
下一篇Java入门和概述
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭