利用内存映射文件在进程间共享数据
闲暇时间随便写了个利用内存映射文件在进程间共享数据小例子,代码很简单,有注释
代码如下:
- //利用内存文件映射,在2个进程中共享数据
- //首先一个进程1创建 内存映射文件,并且输入想要通信的数据
- //然后,另一个进程2Create的时候,会检测该映射文件是否存在,如果存在则映射文件,并且读取数据
- #include <windows.h>
- #include <iostream>
- #include <string>
- int main()
- {
- //由于是为了在进程间共享数据,因此CreateFileMapping 的第一个参数
- //为 INVALID_HANDLE_VALUE,那么系统会在页交换文件中创建映射对象,
- //而不是在磁盘上,这样会提升效率的
- HANDLE hFilemap = ::CreateFileMapping(INVALID_HANDLE_VALUE,
- NULL,
- PAGE_READWRITE,
- 0,
- 4 * 1024,
- L"ShareData");
- if(NULL != hFilemap)
- {
- if(ERROR_ALREADY_EXISTS == GetLastError())
- {
- //同名的filemap已经存在,准备获得数据
- std::cout << "Mapping already exists" << std::endl;
- CloseHandle(hFilemap);
- hFilemap = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE,
- FALSE,
- L"ShareData");
- PVOID pView = MapViewOfFile(hFilemap,
- FILE_MAP_READ | FILE_MAP_WRITE,
- 0,
- 0,
- 0);
- if(pView != NULL)
- {
- std::wstring strShareData;
- strShareData = (PTSTR)pView;
- std::wcout << L"share data:" << strShareData << std::endl;
- }
- }
- else
- {
- //否则,则映射文件,并且写入数据
- PVOID pView = MapViewOfFile(hFilemap,
- FILE_MAP_READ | FILE_MAP_WRITE,
- 0,
- 0,
- 0);
- if(NULL != pView)
- {
- std::cout << "please input share date" << std::endl;
- std::wstring wstrShareData;
- std::wcin >> wstrShareData;
- wcscpy((PWSTR)pView, wstrShareData.c_str());
- }
- UnmapViewOfFile(pView);
- }
- }
- else
- {
- std::cout << "create file map failed" << std::endl;
- }
- system("pause");
- return 0;
- }
浙公网安备 33010602011771号