cpp-共享内存

LPVOID lpBase;
HANDLE hMapFile;

int load_mmp_file(const wstring& filePath)
{
scope_filePtr file(filePath, L"rb");
uint32_t size = file.fileSize();
unique_ptr<char[]> spBuf = make_unique<char[]>(size + 1);
file.read(spBuf.get(), size, 1, size);
file.close();

// Create a memory-mapped file (MMF)
// 创建共享文件句柄
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // 物理文件句柄
NULL, // 默认安全级别
PAGE_READWRITE, // 可读可写
0, // 高位文件大小
size, // 地位文件大小
L"ShareMemory" // 共享内存名称
);
// 映射缓存区视图 , 得到指向共享内存的指针
lpBase = MapViewOfFile(
hMapFile, // 共享内存的句柄
FILE_MAP_ALL_ACCESS, // 可读写许可
0,
0,
size
);

// 将数据拷贝到共享内存
memcpy((char*)lpBase, spBuf.get(), size);

return size;
}

// 解除文件映射
UnmapViewOfFile(lpBase);
// 关闭内存映射文件对象句柄
CloseHandle(hMapFile);
// 打开共享的文件对象
HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,NULL,L"ShareMemory");
if (hMapFile)
{
LPVOID lpBase = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0);
// 将共享内存数据拷贝出来
char szBuffer[BUF_SIZE] = {0};
strcpy(szBuffer,(char*)lpBase);
printf("%s",szBuffer);

// 解除文件映射
UnmapViewOfFile(lpBase);
// 关闭内存映射文件对象句柄
CloseHandle(hMapFile);
}
else
{
// 打开共享内存句柄失败
printf("OpenMapping Error");
}