CreateFileMapping实现的共享内存及用法
CreateFileMapping函数实现了共享内存,其用法以下:
1. 首先需要调用CreateFileMapping函数创建一个文件映照对象,该函数的原型以下:
```c++
HANDLE CreateFileMapping(
HANDLE hFile, // 文件句柄,可为INVALID_HANDLE_VALUE
LPSECURITY_ATTRIBUTES lpAttributes,// 安全属性,NULL表示使用默许安全描写符
DWORD flProtect, // 内存保护标志,如PAGE_READWRITE
DWORD dwMaximumSizeHigh, // 文件映照对象的最大大小高32位
DWORD dwMaximumSizeLow, // 文件映照对象的最大大小低32位
LPCTSTR lpName // 文件映照对象的名称
);
```
2. 创建成功后,可以通过调用MapViewOfFile函数将文件映照对象映照到当前进程的地址空间,该函数的原型以下:
```c++
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // 文件映照对象句柄
DWORD dwDesiredAccess, // 访问权限,如FILE_MAP_ALL_ACCESS
DWORD dwFileOffsetHigh, // 文件偏移高32位
DWORD dwFileOffsetLow, // 文件偏移低32位
SIZE_T dwNumberOfBytesToMap // 映照的字节数
);
```
3. 映照成功后,可以直接使用返回的指针来访问共享内存。当不再需要访问共享内存时,需要调用UnmapViewOfFile函数取消映照,该函数的原型以下:
```c++
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress // 共享内存的基地址
);
```
4. 当进程不再需要使用共享内存时,需要调用CloseHandle函数关闭文件映照对象的句柄,该函数的原型以下:
```c++
BOOL CloseHandle(
HANDLE hObject // 文件映照对象句柄
);
```
通过以上的函数调用,就能够实现共享内存的创建、映照、访问和释放。共享内存可以在区分的进程之间进行数据交换,提高进程间通讯的效力。
TOP