利用内存映射文件在进程间共享数据
2012-11-06 17:24
423 查看
闲暇时间随便写了个利用内存映射文件在进程间共享数据小例子,代码很简单,有注释
代码如下:
[cpp]
//利用内存文件映射,在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;
}
代码如下:
[cpp]
//利用内存文件映射,在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;
}
相关文章推荐
- 利用内存映射文件在两个进程间共享数据 转
- 利用内存映射文件在进程间共享数据
- 利用内存映射文件在进程间共享数据
- 利用内存映射文件在两个进程间共享数据
- 利用内存映射文件在进程间共享数据
- 用内存映射文件在进程中共享数据http://blog.csdn.net/zicheng_lin/article/details/6660404
- c++ 内存映射文件进程间共享数据
- 使用内存映射文件在进程之间共享数据
- windows笔记-使用内存映射文件在进程之间共享数据
- Win32汇编使用内存映射文件在进程间共享数据
- 用内存映射文件在进程中共享数据
- 通过内存映射文件实现进程间数据共享
- 内存映射文件--进程间数据共享
- 用内存映射文件在进程中共享数据
- windows笔记-使用内存映射文件在进程之间共享数据
- 进程间通过内存映射文件共享数据
- 使用内存映射文件在进程之间共享数据
- 使用内存映射文件在进程间共享数据
- 使用内存映射文件在进程之间共享数据
- 使用内存映射文件在进程间共享数据