CreateFileMapping
时间: 2024-01-20 08:03:00 浏览: 134
CreateFileMapping是Windows API的一部分,用于创建一个文件映射对象,可以将文件或者共享内存映射到调用进程的地址空间中。可以使用CreateFileMapping函数创建一个匿名共享内存,也可以使用它来创建一个文件映射对象,将文件映射到内存中。
函数原型为:
```c
HANDLE CreateFileMapping(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName
);
```
参数解释:
- hFile:指向已经打开的文件的句柄,如果创建的是匿名共享内存,则传入INVALID_HANDLE_VALUE。
- lpFileMappingAttributes:指向SECURITY_ATTRIBUTES结构体的指针,用于设置共享内存的安全属性,一般传入NULL。
- flProtect:指定页面保护的方式,可以设置为PAGE_READWRITE等常量。如果创建的是匿名共享内存,则此参数必须设置为PAGE_READWRITE。
- dwMaximumSizeHigh:指定共享内存对象的最大大小,高32位。
- dwMaximumSizeLow:指定共享内存对象的最大大小,低32位。
- lpName:指定共享内存对象的名称,如果创建的是匿名共享内存,则此参数必须设置为NULL。
示例代码如下:
```c
#include <stdio.h>
#include <windows.h>
#define SHM_SIZE 1024
int main()
{
HANDLE hMapFile;
LPCTSTR pBuf;
// 创建共享内存
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, SHM_SIZE, NULL);
if (hMapFile == NULL)
{
printf("创建共享内存失败!\n");
return 1;
}
// 将共享内存映射到当前进程的地址空间
pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, SHM_SIZE);
if (pBuf == NULL)
{
printf("映射共享内存失败!\n");
CloseHandle(hMapFile);
return 1;
}
// 读写共享内存
sprintf(pBuf, "hello, shared memory!");
// 断开共享内存连接
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
```
其中,CreateFileMapping函数用于创建一个匿名共享内存,将共享内存映射到当前进程的地址空间中。MapViewOfFile函数用于将共享内存映射到当前进程的地址空间,并返回共享内存的起始地址。最后,UnmapViewOfFile和CloseHandle函数用于释放共享内存和文件映射对象相关的资源。
阅读全文