Server在内存中开辟一块数据区域并写入数据,Client读取Serve在内存中开辟的数据区内的数据并显示出来
共享区域通过名称辨别
VS2010下正常编译通过
下面上源代码
Server端源代码:
#include<Windows.h>
#include<iostream>
using namespace std;
int main()
{
HANDLE myhandle;
/*
*在内存划出大小4字节名为MyInfo的区域
*/
myhandle=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(int),L"MyInfo");
DWORD error=GetLastError();
if(error== ERROR_FILE_INVALID||error== ERROR_INVALID_HANDLE ||error== ERROR_ALREADY_EXISTS )
{
cout<<"Create Failed"<<endl;
}
else
{
cout<<"Create Success"<<endl;
int x;
int *p;
while(cin>>x)
{
/*
* 获取内存对象,并操作写入一个int型数据
*/
p=(int *)MapViewOfFile(myhandle,FILE_MAP_WRITE,0,0,sizeof(int));
p[0]=x;
cout<<"成功将数据"<<x<<"写入共享内存区"<<endl;
UnmapViewOfFile(p);
}
}
CloseHandle( myhandle);
system("pause");
return 0;
}
Client端源代码:
#include<Windows.h>
#include<iostream>
using namespace std;
int main()
{
HANDLE myhandle;
myhandle=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READONLY,0,sizeof(int),L"MyInfo");
DWORD error=GetLastError();
if(error!= ERROR_ALREADY_EXISTS )
{
cout<<"Create Failed"<<endl;
}
else
{
cout<<"Create Success"<<endl;
int x;
int *p;
while(cin>>x)
{
/*
* 获取内存对象,并操作读取一个int型数据
*/
p=(int *)MapViewOfFile(myhandle,FILE_MAP_READ,0,0,sizeof(int));
cout<<"共享区域数据为:"<<p[0]<<endl;
UnmapViewOfFile(p);
}
}
CloseHandle( myhandle);
system("pause");
return 0;
}