温馨提示×

CreateFileMapping实现的共享内存及用法

小云
142
2023-08-05 17:16:04
栏目: 编程语言

CreateFileMapping函数实现了共享内存,其用法如下:

  1. 首先需要调用CreateFileMapping函数创建一个文件映射对象,该函数的原型如下:
HANDLE CreateFileMapping(
HANDLE hFile,                      // 文件句柄,可为INVALID_HANDLE_VALUE
LPSECURITY_ATTRIBUTES lpAttributes,// 安全属性,NULL表示使用默认安全描述符
DWORD flProtect,                   // 内存保护标志,如PAGE_READWRITE
DWORD dwMaximumSizeHigh,           // 文件映射对象的最大大小高32位
DWORD dwMaximumSizeLow,            // 文件映射对象的最大大小低32位
LPCTSTR lpName                     // 文件映射对象的名称
);
  1. 创建成功后,可以通过调用MapViewOfFile函数将文件映射对象映射到当前进程的地址空间,该函数的原型如下:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,  // 文件映射对象句柄
DWORD dwDesiredAccess,      // 访问权限,如FILE_MAP_ALL_ACCESS
DWORD dwFileOffsetHigh,     // 文件偏移高32位
DWORD dwFileOffsetLow,      // 文件偏移低32位
SIZE_T dwNumberOfBytesToMap // 映射的字节数
);
  1. 映射成功后,可以直接使用返回的指针来访问共享内存。当不再需要访问共享内存时,需要调用UnmapViewOfFile函数取消映射,该函数的原型如下:
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress // 共享内存的基地址
);
  1. 当进程不再需要使用共享内存时,需要调用CloseHandle函数关闭文件映射对象的句柄,该函数的原型如下:
BOOL CloseHandle(
HANDLE hObject // 文件映射对象句柄
);

通过以上的函数调用,就可以实现共享内存的创建、映射、访问和释放。共享内存可以在不同的进程之间进行数据交换,提高进程间通信的效率。

0