CreateFileMapping用法
CreateFileMapping用法
在Windows平台上,CreateFileMapping函数是一种用于创建文件映射对象的重要函数。它可以将一个磁盘文件或者其他文件映射到一个进程的虚拟地址空间中,使得多个进程可以共享同一个物理内存。
下面将详细介绍CreateFileMapping函数的用法。
函数原型
BOOL CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName );
参数解释
hFile:一个打开的文件句柄,用于指定将要被映射的文件。如果传入INVALID_HANDLE_VALUE,则创建一个匿名映射对象。
lpAttributes:指向SECURITY_ATTRIBUTES结构体的指针,用于指定映射对象是否可以被子进程继承。如果为NULL,则默认不允许继承。
flProtect:指定映射对象的保护方式。常用的选项有:
- PAGE_READWRITE:可读写
- PAGE_READONLY:只读
- PAGE_WRITECOPY:在写时复制
dwMaximumSizeHigh:指定映射对象的大小,高位DWORD。
dwMaximumSizeLow:指定映射对象的大小,低位DWORD。如果为0表示映射整个文件。
lpName:一个字符串,用于指定映射对象的名称。如果为NULL,则创建一个匿名映射对象。
返回值
函数成功返回一个新创建的映射对象的句柄;失败返回NULL。
使用示例
#include <windows.h>
int main() {
// 打开文件
HANDLE hFile = CreateFile(L"test.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return 1;
}
// 创建映射对象
HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
if (hMapping == NULL) {
CloseHandle(hFile);
return 1;
}
// 获取映射视图
LPVOID lpBaseAddress = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (lpBaseAddress == NULL) {
CloseHandle(hMapping);
CloseHandle(hFile);
return 1;
}
// 使用映射视图进行读写操作
memcpy(lpBaseAddress, "Hello World!", sizeof("Hello World!"));
// 关闭映射视图
UnmapViewOfFile(lpBaseAddress);
// 关闭映射对象和文件句柄
CloseHandle(hMapping);
CloseHandle(hFile);
return 0;
}
总结
CreateFileMapping函数是一个强大的函数,可以实现多个进程之间的文件共享和通信。通过合理使用该函数,我们可以轻松地实现进程间数据的共享。希望上述介绍对您理解和使用CreateFileMapping函数有所帮助。
上一篇