Filemapping 文件映射小记

  看windows下的进程间通信,第一个就是Filemapping,今天下午好好的看了下.试了半天写了两个小程序终于运行成功了...

program 1

 1 #include<windows.h>
 2 #include<iostream>
 3 
 4 int main()
 5 {
 6     HANDLE hFile=CreateFile("e:\kuan.txt",GENERIC_READ|GENERIC_WRITE,
 7         FILE_SHARE_WRITE,
 8         NULL,
 9         OPEN_ALWAYS,
10         FILE_ATTRIBUTE_NORMAL,
11         NULL);
12 
13     HANDLE hFileMapping=CreateFileMapping(hFile,
14         NULL,
15         PAGE_READWRITE,
16         0,0x00000110,
17         "kuan");
18 
19     if(hFileMapping==NULL)
20     {
21         std::cout<<"fmap invali"<<std::endl;
22     
23     }
24 
25     PBYTE pbFile=(PBYTE)MapViewOfFile(hFileMapping,
26         FILE_MAP_ALL_ACCESS ,0,0,0);
27 
28     //*pbFile='B';
29     char* pb="asdasdasdasdasdasdasdasdasdasd";
30     memcpy(pbFile,pb,strlen(pb));
31     //FlushViewOfFile(pbFile,0);
32     UnmapViewOfFile(pbFile);
33     getchar();
34     CloseHandle(hFileMapping);
35     CloseHandle(hFile);
36 
37 
38     system("PAUSE");
39     return 0;
40 }

program 2

 1 #include<windows.h>
 2 #include<iostream>
 3 
 4 int main()
 5 {
 6     HANDLE hFilemapping=OpenFileMapping(FILE_MAP_ALL_ACCESS,0,"kuan");
 7     
 8     PBYTE pb=(PBYTE)MapViewOfFile(hFilemapping,FILE_MAP_ALL_ACCESS,0,0,0);
 9 
10     char *p="12131231241";
11     *pb='A';
12     //memcpy(pb,p,strlen(p));
13     UnmapViewOfFile(pb);
14     //CloseHandle(hFilemapping);
15     return 0;
16 
17 }

文件映射对象可以通过文件名访问,然后在其他程序中通过openfilemapping打开,注意openfilemapping第一个参数不同于createfilemapping的第三个参数flprotection,

openfilemapping是FILE_MAP_* ,createfilemapping是PAGE_**,为此第二个进程一直不能写入,但是能读出,这到是很神奇啊...

原文地址:https://www.cnblogs.com/cavehubiao/p/3290495.html