CreateFileMapping windows

Windows中怎么使用CreateFileMapping

小亿
175
2023-08-03 13:29:08
栏目: 编程语言

在Windows中,可以使用CreateFileMapping函数来创建文件映射。

CreateFileMapping函数的原型如下:

HANDLE CreateFileMapping(
HANDLE                hFile,
LPSECURITY_ATTRIBUTES lpAttributes,
DWORD                 flProtect,
DWORD                 dwMaximumSizeHigh,
DWORD                 dwMaximumSizeLow,
LPCTSTR               lpName
);

参数说明:

CreateFileMapping函数的返回值是一个表示文件映射对象的句柄。可以使用这个句柄来访问和操作文件映射。

创建文件映射对象后,可以使用MapViewOfFile函数将文件映射到进程的地址空间中,然后就可以通过访问这块内存来读写文件内容。

示例代码如下:

#include <windows.h>
#include <iostream>
int main() {
HANDLE hFile = CreateFile(
"test.txt",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE) {
std::cout << "Failed to open file." << std::endl;
return 1;
}
HANDLE hMapping = CreateFileMapping(
hFile,
NULL,
PAGE_READWRITE,
0,
0,
NULL
);
if (hMapping == NULL) {
std::cout << "Failed to create file mapping." << std::endl;
CloseHandle(hFile);
return 1;
}
LPVOID lpBaseAddress = MapViewOfFile(
hMapping,
FILE_MAP_ALL_ACCESS,
0,
0,
);
if (lpBaseAddress == NULL) {
std::cout << "Failed to map view of file." << std::endl;
CloseHandle(hMapping);
CloseHandle(hFile);
return 1;
}
// 在这里可以通过访问lpBaseAddress指向的内存来读写文件内容
UnmapViewOfFile(lpBaseAddress);
CloseHandle(hMapping);
CloseHandle(hFile);
return 0;
}

以上示例代码创建了一个文件句柄hFile,并将其映射到文件映射对象hMapping中。然后使用MapViewOfFile函数将文件映射到进程的地址空间中,返回一个指向映射后内存的指针lpBaseAddress。通过访问lpBaseAddress指向的内存,可以读写文件内容。最后需要使用UnmapViewOfFile函数取消文件映射,并关闭文件映射对象和文件句柄。

0
看了该问题的人还看了