Windows内存映射文件

前言

在查看mono源码的时候,发现在加载mscorlib.dll的时候,使用的是内存映射文件.不管在Windows系统还是Linux系统,都有对应内存映射文件API.内存映射文件可以在不同进程间共享数据,效率也是最好的.

简单上手

#include <stdio.h> #include <stdlib.h> #include <Windows.h> //内存映射文件 int main(int argc, char* argv[]) { //1. 打开文件,获取文件内核对象 HANDLE hFile = CreateFile(TEXT("1.txt"), GENERIC_READ| GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //获取文件大小 DWORD fileSize = GetFileSize(hFile, NULL); //2. 创建文件映射内核对象 HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 100, NULL); //3. 将文件的数据映射到当前程序的地址空间 PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMap, FILE_MAP_COPY, 0, 0, 0); for (int i = 0; i < fileSize; i++) { printf("%c ", pbFile[i]); } //4. 撤销对文件的映射 UnmapViewOfFile(pbFile); //5. 关闭文件映射内核对象 CloseHandle(hFileMap); //6. 关闭文件 CloseHandle(hFile); return 0; }

代码不多,主要在2和3上,这个demo看起来比起直接读取文件复杂些,具体在后面去更深入地学习内存映射文件,再详细说,还有在Linux如何使用内存映射文件.

个人能力有限,如果您发现有什么不对,请私信我

如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注