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

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

 

相关文章
|
4月前
|
存储
进程间通讯-共享内存
进程间通讯-共享内存
22 0
|
8月前
|
安全 数据库
【并发技术06】线程范围内共享数据
【并发技术06】线程范围内共享数据
【并发技术08】多个线程间共享数据
【并发技术08】多个线程间共享数据
|
Linux
多线程、多进程同时操作MMAP,会怎么样?(二)
多线程、多进程同时操作MMAP,会怎么样?
268 0
|
Android开发 数据安全/隐私保护 C++
多线程、多进程同时操作MMAP,会怎么样?(一)
多线程、多进程同时操作MMAP,会怎么样?
185 0
多线程、多进程同时操作MMAP,会怎么样?(一)
使用共享内存作为进程互斥锁的代码
使用共享内存作为进程互斥锁的代码
83 0
|
PHP C++
phpCOW机制(写时复制)
phpCOW机制(写时复制)
64 0
phpCOW机制(写时复制)
|
物联网 Linux 开发者
Shmat 共享内存映射|学习笔记
快速学习 Shmat 共享内存映射
190 0
|
存储 Java 测试技术
内存映射文件
内存映射文件
243 0
内存映射文件
多线程的关键是,不同线程对象要独立
多线程的关键是,不同线程对象要独立
100 0