最近在做内存文件映射的东西,有个问题想问一下???
HANDLE hShareFile;
char *lpMapFile;
hShareFile = CreateFileMapping( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE,
0, 0x00140000, "share_file" );
lpMapFile = (char*)MapViewOfFile( hShareFile, FILE_MAP_ALL_ACCESS, 0, 0, 0 );创建完了,我该如何往这个内存文件里写东西,还有我在另一个进程里该如何去都这个映射文件里的数据,请各位指教
HANDLE hShareFile;
char *lpMapFile;
hShareFile = CreateFileMapping( (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE,
0, 0x00140000, "share_file" );
lpMapFile = (char*)MapViewOfFile( hShareFile, FILE_MAP_ALL_ACCESS, 0, 0, 0 );创建完了,我该如何往这个内存文件里写东西,还有我在另一个进程里该如何去都这个映射文件里的数据,请各位指教
创建完后, lpMapFile 就是这个文件的指针. 直接向 lpMapFile 地址写内容即可. 比如, 在开始处写一个100 的整数(32位)值:
*((int*)lpMapFile) = 100;
其他进程用 OpenFileMapping 函数打开同一个文件映射对象即可共享受这个文件映射.
如果想存取一部分数据可通过移动lpMapFile 指针得到
HANDLE hMapping;
LPSTR lpData;
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
sprintf(lpData,"Server Data String");
while(strlen(lpData)<20)
Sleep(1000);
AfxMessageBox("long than 20");
UnmapViewOfFile(lpData); 访问修改
hMapping = OpenFileMapping( FILE_MAP_ALL_ACCESS, TRUE, "MYSHARE" );
data=(char*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
sprintf(data,"My Client data string that is longer than 20");
UnmapViewOfFile(data);
CloseHandle(hMapping);共享文件