文件映射
文件映射的概念:
文件映射(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 }