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程序:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWNvZGVsZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

         执行效果:


process1程序:

process2 程序:



【IPC进程间通讯之三】内存映射文件Mapping File的更多相关文章

  1. 守护进程,进程安全,IPC进程间通讯,生产者消费者模型

    1.守护进程(了解)2.进程安全(*****) 互斥锁 抢票案例3.IPC进程间通讯 manager queue(*****)4.生产者消费者模型 守护进程 指的也是一个进程,可以守护着另一个进程 一 ...

  2. win32进程间通讯--共享内存

    小白一枚,如有不对,请各位大神多多指教! 最近看了看win32进程间通讯.简单写了写利用共享内存实现进程间通讯 使用共享内存实现进程间通讯: 1.在WM_CREATE消息下创建文件映射内核对象 hMa ...

  3. 【IPC进程间通讯之中的一个】邮槽MailSlot

    IPC进程间通信+邮槽MailSlot                IPC(Inter-Process Communication.进程间通信).        现代计算机採用虚拟内存机制,为进程提 ...

  4. 【IPC进程间通讯之二】管道Pipe

    IPC进程间通信+管道Pipe                IPC(Inter-Process Communication.进程间通信).         管道用于进程间共享数据,事实上质是共享内存 ...

  5. ipc 进程间通讯的AIDL

    1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间 ...

  6. android IPC 进程间通讯

    参考资料: http://blog.csdn.net/birdsaction/article/details/39451849 在这里我说一下学习技术的方法,别人的博客,别人的东西,再简单,自己没有写 ...

  7. .NET 4.0中使用内存映射文件实现进程通讯

    操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段.Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都 ...

  8. NET 4 中 内存映射文件

    原文链接 : http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net- ...

  9. 《windows核心编程》 17章 内存映射文件

    内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...

随机推荐

  1. css3 transform 旋转div

    css3 transform 旋转div 学习了:http://www.w3school.com.cn/cssref/pr_transform.asp

  2. 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)

    这一次我们深入的学习一下JavaScript面向对象技术,在学习之前,必要的说明一下一些面向对象的一些术语. 这也是全部面对对象语言所拥有的共同点.有这样几个面向对象术语: 对象 ECMA-262把对 ...

  3. android 九宫格(16宫格)控件

    public class NineRectView extends ViewGroup { private Context ctx; private int wSize,hSize,row,colum ...

  4. socket编程之二:两种链接类型tcp和udp

    前面一篇文章说到了一些计算机网络的基础知识.引入了socket.从这节開始,就进入正题了. 一 概述 TCP:Transimission Control Protocol传输控制协议. UPD:Use ...

  5. JavaScript的闭包理解

    因为本人是做java web 开发的,对js仅仅是存在非常浅的理解,js闭包的概念非常早就听说了,可是一直都不明确是什么意思,今天准备梳理一下闭关的概念; 闭包(closure)是Javascript ...

  6. 广东工业大学2016校赛决赛-网络赛 1169 Problem A: Krito的讨伐 优先队列

    Problem A: Krito的讨伐 Description Krito终于干掉了99层的boss,来到了第100层.第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点 ...

  7. 【HDU 2176】 取(m堆)石子游戏

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2176 [算法] Nim博弈 当石子数异或和不为0时,先手必胜,否则先手必败 设石子异或和为S 如果 ...

  8. BZOJ 2212线段树的合并

    借鉴(抄)了一下题解-- 线段树合并的裸题吧- //By SiriusRen #include <cstdio> #include <cstring> #include < ...

  9. BZOJ 2427 /HAOI 2010 软件安装 tarjan缩点+树形DP

    终于是道中文题了.... 当时考试的时候就考的这道题.... 果断GG. 思路: 因为有可能存在依赖环,所以呢 先要tarjan一遍 来缩点. 随后就进行一遍树形DP就好了.. x表示当前的节点.j表 ...

  10. nsrunloop与模式

    scrollview的模式切换:退出原来的模式使用新模式. 2018-04-18 18:16:41.208113+0800 CEMonitor[5014:410604] kCFRunLoopDefau ...