博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【IPC进程间通讯之三】内存映射文件Mapping File
阅读量:6677 次
发布时间:2019-06-25

本文共 1180 字,大约阅读时间需要 3 分钟。

IPC进程间通信+共享内存Mapping

      
        IPC(Inter-Process Communication。进程间通信)。
        文件映射(Mapping)是一种将文件内容映射到内存地址的技术,通过对映射内存,读写文件如同读写内存一般简单。

       多个进程映射同一个文件映射对象,也即多个进程映射到同一个物理存储页面,因此。当一个进程向映射内存写入数据时,其它进程能够通过映射内存读取数据。通过这个机制实现进程间通信。

         
       1.内存文件映射Mapping File :
         A进程创建一个命名的Mapping对象,并在映射内存中写入须要共享的数据。B进程通过对象名打开Mapping对象,映射该Mapping对象。从映射内存中读取数据。
       2.基本API函数 :
建Mapping对象:
        HANDLE    CreateFileMapping(
                           
HANDLE      hFile,                                   //物理文件句柄
                           
LPSECURITY_ATTRIBUTES    lpAttributes, //安全设置
                         
 DWORD      flProtect,                                      //保护设置
                           
DWORD      dwMaximumSizeHigh,         //高位文件大小
                         
 DWORD      dwMaximumSizeLow,          //低位文件大小
                           
LPCTSTR   lpName                                   //共享内存名称
);
        该函数返回创建的Mapping对象。

创建映射内存:
        LPVOID  MapViewOfFile(
                      HANDLE    hFileMappingObject,               //Mapping对象
                         DWORD     dwDesiredAccess,                        //存取类别
                         DWORD     dwFileOffsetHigh,                  //映射文件高位
                         DWORD     dwFileOffsetLow,                    //映射文件地位
                         SIZE_T        dwNumberOfBytesToMap       //映射字节数
);
        该函数用于创建Mapping对象的映射内存,返回映射内存。

内存复制
        VOID  CopyMemory(
                    PVOID Destination,                //要复制内存块的目的地址
                    CONST VOID *Source,              //要复制内存块的源地址
                    SIZE_T Length                                          //复制的字节数
);
       该函数用于将数据拷贝到映射内存。

打开Mapping对象:
       HANDLE  OpenFileMapping(
                         DWORD   dwDesiredAccess ,   // 存取权限
                         BOOL       bInheritHandle ,       //继承设置,一般设为FALSE
                         LPCTSTR    lpName                  // Mapping对象名
);
      该函数用于打开一个存在的Mapping对象。返回Mapping对象句柄。
  
       3.牛刀小试:
     先在VC6.0中执行process1程序。在执行process2程序:
         执行效果:
process1程序:
process2 程序:
你可能感兴趣的文章
bzoj2539
查看>>
My thoughts after NOIP 2018(1)
查看>>
create-react-app按需引入antd-mobile
查看>>
DensePose: Dense Human Pose Estimation In The Wild(理解)
查看>>
日历插件原理
查看>>
java 实现七大基本排序算法
查看>>
bat批量重命名文件
查看>>
React-Native-Android-Studio整合开发+环境配置+官方实例
查看>>
模仿jquery框架源码---网络
查看>>
iOS----OC特性-特殊功能宏
查看>>
Winform 中实现省市联动效果
查看>>
ios学习杂记
查看>>
Mysql explain用法和性能分析
查看>>
郑厂长系列故事——N骑士问题
查看>>
bzoj 1927: [Sdoi2010]星际竞速
查看>>
BootStrap入门_创建第一个例子
查看>>
DBA_实践指南系列5_Oracle Erp R12日常运维和管理(案例)
查看>>
Ubuntu下C语言连接MySQL
查看>>
Python模块调用时的路径查找
查看>>
.NET 中 Image 转 Icon
查看>>