什么是 OpenFileMapping?
OpenFileMapping 是 Windows API 中的一个函数,用于打开一个已存在的命名文件映射对象。它通常与 CreateFileMapping 和 MapViewOfFile 配合使用,以实现多个进程之间通过共享内存进行高效通信。
函数原型
HANDLE OpenFileMappingW(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCWSTR lpName
);
参数说明:
dwDesiredAccess:访问权限,如 FILE_MAP_READ、FILE_MAP_WRITE 等。bInheritHandle:是否允许子进程继承句柄。lpName:要打开的命名文件映射对象的名称。
使用场景
适用于以下情况:
- 多个进程需要读取同一块内存数据(如配置信息)。
- 高性能 IPC(进程间通信)需求,避免频繁 I/O 操作。
- 跨进程共享大型数据结构或缓存。
简单示例(C++)
// 打开已存在的命名映射
HANDLE hMap = OpenFileMapping(FILE_MAP_READ, FALSE, L"MySharedMemory");
if (hMap != NULL) {
LPVOID pData = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
if (pData) {
// 读取共享数据
printf("Data: %s\n", (char*)pData);
UnmapViewOfFile(pData);
}
CloseHandle(hMap);
}
注意事项
- 必须确保目标映射对象已由其他进程通过
CreateFileMapping创建。 - 名称区分大小写,且需符合 Windows 命名规则。
- 使用完毕后务必调用
UnmapViewOfFile和CloseHandle释放资源。