• 利用内存映射文件在进程间共享数据


    闲暇时间随便写了个小例子,代码很简单,有注释

    代码如下:

    //利用内存文件映射,在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/8151448

  • 相关阅读:
    java中的位运算符
    Servlet中的初始化参数、上下文参数、以及@Resource资源注入
    Servlet中文件上传的几种方式
    marquee标签的使用
    SpringBoot热部署的两种方式
    eclipse中安装lombok插件
    关于Servlet中的转发和重定项
    Cormen — The Best Friend Of a Man CodeForces 732B
    牛客小白月赛9之签到题
    Codeforces アンバランス / Unbalanced
  • 原文地址:https://www.cnblogs.com/findumars/p/6731405.html
Copyright © 2020-2023  润新知