使用内存映射文件来共享数据

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

内存映射文件共享数据原理:系统调用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;
}

 

相关文章
|
7月前
内存映射实现父子进程通信
内存映射实现父子进程通信
|
7月前
内存映射实现无血缘关系进程间通信
内存映射实现无血缘关系进程间通信
|
7月前
|
Linux
进程通信——共享内存
进程通信——共享内存
103 0
|
存储
进程间通讯-共享内存
进程间通讯-共享内存
57 0
【共享内存】
【共享内存】
75 0
|
PHP C++
phpCOW机制(写时复制)
phpCOW机制(写时复制)
91 0
phpCOW机制(写时复制)
|
物联网 Linux C语言
父子进程有自己独立的地址空间|学习笔记
快速学习父子进程有自己独立的地址空间
父子进程有自己独立的地址空间|学习笔记
|
物联网 Linux 开发者
Shmat 共享内存映射|学习笔记
快速学习 Shmat 共享内存映射
|
网络协议
共享内存
共享内存
219 0
|
存储 Java 测试技术
内存映射文件
内存映射文件
290 0
内存映射文件