文件映射

文件映射的概念:

文件映射(Mapping)是一种将文件内容映射到进程虚拟内存的技术

映射成功的文件可以用视图,来引用这段内存,从而达到操作位于此段内存中的文件的目的

文件映射最大的一个特点:可以在不同的进程间共享数据(跨进程)

文件映射和正常操作文件的区别

正常操作文件

CreateFile—>文件句柄->通过文件句柄将文件内容选到虚拟内存,修改内容,重写写入文件中

文件映射:

CreateFile打开文件->创建文件映射对象->将文件映射到内存里->直接对内存操作

文件映射相关API

CreateFileMapping创建一个Mapping对象
OpenFileMapping 打开一个Mapping对象
MapViewOfFile 将mapping对象映射到内存里
UnmapViewOfFile 取消文件映射
FlushViewOfFile 刷新缓冲区,将映射在内存中的文件写回到硬盘里
   

文件映射实践代码

 1 #include<Windows.h>
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     //创建文件句柄
 8     HANDLE hFile = CreateFile(L"C:\\Users\\sm7\\Desktop\\test.txt",
 9         GENERIC_READ | GENERIC_WRITE,
10         0,
11         NULL,
12         OPEN_EXISTING,
13         FILE_ATTRIBUTE_NORMAL,
14         NULL
15     );
16     //创建mapping对象
17     HANDLE hMapping = CreateFileMapping(hFile,
18         NULL,
19         PAGE_READWRITE,
20         0,
21         GetFileSize(hFile, NULL),
22         NULL
23         );
24     //建立映射
25     char* FileBuff= (char*)MapViewOfFile(hMapping,
26         FILE_MAP_ALL_ACCESS,
27         0,
28         0,
29         0
30     );
31     cout << " " << endl;
32     return 0;
33 }