VS C++ 共享内存 CreateFileMapping

匿名 (未验证) 提交于 2019-12-03 00:20:01
创建共享内存
HANDLE CreateFileMapping(

// optional security attributes, 是否被继承




);
hFile // (HANDLE)0xFFFFFFFF 不指定共享内存句柄
lpFileMappingAttributes // 是否被继承
flProtect // 读写权限
dwMaximumSizeHigh
dwMaximumSizeLow // 共享内存大小
lpName // 名字
返回值:
成功:共享内存句柄

失败:GetLastError function returns ERROR_ALREADY_EXISTS;或 NULL。

映射共享内存地址空间
LPVOID MapViewOfFile(





);
hFileMappingObject : CreateFileMapping 和 OpenFileMapping 返回的句柄
dwDesiredAccess : 存取模式
返回值:
成功:返回映射的地址

失败:GetLastError function returns ERROR_ALREADY_EXISTS;或 NULL。

解除映射
BOOL UnmapViewOfFile(

);
返回值:
成功:返回非0

失败:返回0

关闭打开的句柄
BOOL CloseHandle(

);


#include <Windows.h>   #include <cstdio>      static HANDLE hShareMem = INVALID_HANDLE_VALUE; static void * pRawShareAddr = NULL;  int main(int argc, char **argv)   {   	int nMemSize = 1024; 	hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, nMemSize, NULL);  	if( (hShareMem != INVALID_HANDLE_VALUE) && (hShareMem != NULL) ) 	{ 		 pRawShareAddr = (void *)MapViewOfFile(hShareMem, FILE_MAP_ALL_ACCESS, 0, 0, 0); 		 memset(pRawShareAddr, 0, nMemSize);	// 清空数据 	}  	UnmapViewOfFile(pRawShareAddr);	 // 解除映射 	pRawShareAddr=NULL;  	CloseHandle(hShareMem);		// 关闭句柄     hShareMem=INVALID_HANDLE_VALUE;        getchar();       return 0;   }  
打开一个有名的共享内存





返回值:
成功:返回打开 lpName 名字的共享内存地址

失败:GetLastError function returns ERROR_ALREADY_EXISTS;或 NULL。

#include <Windows.h>   #include <cstdio>      static HANDLE hShareMem = INVALID_HANDLE_VALUE; static void * pRawShareAddr = NULL;  int main(int argc, char **argv)   {   	int nMemSize = 1024; 	char sShareMemName[] = "shareMemName"; 	hShareMem = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, (LPCTSTR)sShareMemName); 	if( (hShareMem != INVALID_HANDLE_VALUE) && (hShareMem != NULL) ) 	{ 		 pRawShareAddr = (void *)MapViewOfFile(hShareMem, FILE_MAP_ALL_ACCESS, 0, 0, 0); 		 if (pRawShareAddr != NULL)  		 { 				unsigned long long tempaddr=(unsigned long long)pRawShareAddr;  				printf("get_share_mem: windows shm addr=0x%08x\r\n",tempaddr); 		 } 	} 	 	UnmapViewOfFile(pRawShareAddr);	 // 解除映射 	pRawShareAddr=NULL;  	CloseHandle(hShareMem);		// 关闭句柄     hShareMem=INVALID_HANDLE_VALUE;        getchar();       return 0;   }  
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!