用内存映射文件在进程中共享数据

代码如下,具体解释在代码注释中已经说明


程序1:

// 内存映射文件.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;

DWORD WINAPI FirstThread(PVOID pvParam);

int _tmain(int argc, _TCHAR* argv[])
{

	string  str;
   //从页交换文件中挑拨物理存储器

	static HANDLE hFilemap = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,4*1024,_T("Shared"));

	//将文件的数据映射到进程的地址空间
	char * pView = (char *)MapViewOfFile(hFilemap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
	if(cin>>str)
	{

		strcpy(pView, (const_cast<char*> (str.c_str()))); //赋值
		for(int i=0; i<strlen(pView); ++i) //输出
		{
			cout<<pView[i];
		}

	}
	else
	{
		cout<<*pView<<endl;
	}

	system("pause");
	return 0;
}

程序2:


// 内存映射文件.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;

DWORD WINAPI FirstThread(PVOID pvParam);

int _tmain(int argc, _TCHAR* argv[])
{

	HANDLE hFilemap1 = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("Shared")); //打开名为 Shared的映射对象.
	if(hFilemap1 == NULL)
	{

		cout<<"openfilemapping 失败"<<endl;
	}

	char *pView = (char*)MapViewOfFile(hFilemap1,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);

	if(pView == NULL)
	{

		cout<<"map view 失败"<<endl;
	}
	else
	{
		for(int i=0; i<strlen(pView); ++i)
		{
			cout<<pView[i];
		}

		UnmapViewOfFile(pView);

	}

	CloseHandle(hFilemap1);

	system("pause");
	return 0;
}

程序2共享程序1中创建的内容.

你可能感兴趣的:(String,File,null,存储,System,winapi)