zoukankan      html  css  js  c++  java
  • 使用内存映射文件来共享数据

    内存映射文件共享数据原理:系统调用CreateFileMapping之后,以后其它进程可以通过句柄命名来打开另一进程的内存映射文件映射句柄,得到这个句柄之后通过映射(MapViewOfFile)来访问共享数据。

    // ProcessTransCreateFileMap.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <windows.h>
    #include <tchar.h>
    using namespace std;
    
    #define MAX_SIZE_SHARE 1024
    int _tmain(int argc, _TCHAR* argv[])
    {
        HANDLE hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,MAX_SIZE_SHARE,TEXT("TestFileMap"));
        if(hFileMap != NULL)
        {
            if(::GetLastError() == ERROR_ALREADY_EXISTS)
            {
                PBYTE pView = (PBYTE)MapViewOfFile(hFileMap,FILE_MAP_READ | FILE_MAP_WRITE,0,0,0);
                if(pView != NULL)
                {
                    TCHAR szBuf[1024] = {0};
                    _tcscpy_s(szBuf,1024,(TCHAR * )pView);
                    wcout<<L"the other process data is :"<<szBuf <<endl;
                    UnmapViewOfFile(pView);
                }
                else
                {
                    wcout<<L"map failed!"<<endl;
                }
                ::CloseHandle(hFileMap);
            }
            else
            {
                PBYTE pView = (PBYTE)MapViewOfFile(hFileMap,FILE_MAP_READ | FILE_MAP_WRITE,0,0,0);
                if(pView != NULL)
                {
                    TCHAR szBuf[] = {TEXT("this is a demo!!!!")};
                    ZeroMemory(pView,MAX_SIZE_SHARE);
                    CopyMemory(pView,szBuf,(_tcslen(szBuf) + 1) * sizeof(TCHAR));
                    cout<<"already write a data "<<endl;
                    UnmapViewOfFile(pView);
                }
                else
                    wcout<<L"map failed!"<<endl;
            }
        }
        system("pause");
        return 0;
    }

     

  • 相关阅读:
    Java编程之路相关书籍
    JAVA中的Random()函数
    在鼠标右键上加入使用notepad++编辑
    更改IE浏览器的收藏夹位置
    Java四类八种数据类型
    成为Java顶尖程序员 ,看这11本书就够了
    面向对象(多异常的声明与处理)
    面向对象(异常try-catch)
    面向对象(异常概述)
    面向对象(局部内部类和匿名内部类)
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/3226880.html
Copyright © 2011-2022 走看看