66.文件映射为内存进行操作

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了66.文件映射为内存进行操作相关的知识,希望对你有一定的参考价值。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<Windows.h>
 4 
 5 char path[256] = "kaifang.txt";
 6 
 7 void main()
 8 {
 9                               //路径,读写,    
10     HANDLE hfile = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, 0, NULL,
11         OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//打开一个文件
12 
13     //如果打开失败
14     if (hfile ==INVALID_HANDLE_VALUE)
15     {
16         printf("打开文件失败");
17         system("pause");
18     }
19     //获取文件大小
20     printf("\n%d", GetFileSize(hfile,NULL));
21     //创建映射
22     HANDLE hmap = CreateFileMappingA(hfile, 
23         NULL, PAGE_READWRITE | SEC_COMMIT,//读写
24         0, 
25         GetFileSize(hfile, NULL) + 1,//文件大小多一位
26         NULL);
27     //判断是否映射失败
28     if (hmap==NULL)
29     {
30         printf("映射失败");
31         CloseHandle(hfile);
32         system("pause");
33     }
34     //创建一个指针,存储映射以后的首地址
35     PVOID pvfile = MapViewOfFile(hmap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
36 
37     if (pvfile==NULL)
38     {
39         printf("指针映射失败");
40         CloseHandle(hfile);
41         CloseHandle(hmap);
42         system("pause");
43 
44     }
45 
46     puts("映射成功");
47     char *pstart = pvfile;//首地址
48     char *pend = pstart + GetFileSize(hfile, NULL);//结束地址
49     system("pause");
50     
51     char str[100] = "test test";
52     memcpy(pend, str, strlen(str));
53 
54 
55     system("pause");
56     UnmapViewOfFile(pvfile);//解除映射
57     CloseHandle(hmap);
58     system("pause");
59 
60 }

 

以上是关于66.文件映射为内存进行操作的主要内容,如果未能解决你的问题,请参考以下文章

截断内存映射文件

如何将 vector<Chunk*> 读/写为内存映射文件?

内存映射文件

文件映射mmap

文件映射mmap

高效率场景-内存映射