用内存映射文件在进程中共享数据http://blog.csdn.net/zicheng_lin/article/details/6660404

来源:互联网 发布:java记录访问次数 编辑:程序博客网 时间:2024/05/22 15:53

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


程序1:

[cpp] view plaincopy
  1. // 内存映射文件.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <Windows.h>  
  6. #include <iostream>  
  7. #include <string>  
  8. using namespace std;  
  9.   
  10. DWORD WINAPI FirstThread(PVOID pvParam);  
  11.   
  12. int _tmain(int argc, _TCHAR* argv[])  
  13. {  
  14.   
  15.     string  str;  
  16.    //从页交换文件中挑拨物理存储器  
  17.   
  18.     static HANDLE hFilemap = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,4*1024,_T("Shared"));  
  19.   
  20.     //将文件的数据映射到进程的地址空间  
  21.     char * pView = (char *)MapViewOfFile(hFilemap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);  
  22.     if(cin>>str)  
  23.     {  
  24.   
  25.         strcpy(pView, (const_cast<char*> (str.c_str()))); //赋值  
  26.         for(int i=0; i<strlen(pView); ++i) //输出  
  27.         {  
  28.             cout<<pView[i];  
  29.         }  
  30.   
  31.     }  
  32.     else  
  33.     {  
  34.         cout<<*pView<<endl;  
  35.     }  
  36.   
  37.     system("pause");  
  38.     return 0;  
  39. }  

程序2:

[cpp] view plaincopy
  1. // 内存映射文件.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <Windows.h>  
  6. #include <iostream>  
  7. #include <string>  
  8. using namespace std;  
  9.   
  10. DWORD WINAPI FirstThread(PVOID pvParam);  
  11.   
  12. int _tmain(int argc, _TCHAR* argv[])  
  13. {  
  14.   
  15.     HANDLE hFilemap1 = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("Shared")); //打开名为 Shared的映射对象.  
  16.     if(hFilemap1 == NULL)  
  17.     {  
  18.   
  19.         cout<<"openfilemapping 失败"<<endl;  
  20.     }  
  21.   
  22.     char *pView = (char*)MapViewOfFile(hFilemap1,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);  
  23.   
  24.     if(pView == NULL)  
  25.     {  
  26.   
  27.         cout<<"map view 失败"<<endl;  
  28.     }  
  29.     else  
  30.     {  
  31.         for(int i=0; i<strlen(pView); ++i)  
  32.         {  
  33.             cout<<pView[i];  
  34.         }  
  35.   
  36.         UnmapViewOfFile(pView);  
  37.   
  38.     }  
  39.   
  40.     CloseHandle(hFilemap1);  
  41.   
  42.     system("pause");  
  43.     return 0;  
  44. }  


原创粉丝点击