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. 逆向学习XXclient怎样仅仅执行一个实例

    个人觉得学习分两种, 一种是当面请教和直接从书本网络中的资料学习. 其二就是看着令你惊叹的作品-顿悟. 什么?顿悟不了?那我们就一起来逆向学习吧!差点忘了,我并不打算提供Demo,这并不重要,难道你打 ...

  2. C语言:一个涉及指针函数返回值与printf乱码、内存堆栈的经典案例

    一个奇怪的C语言问题,涉及到指针.数组.堆栈.以及printf.以下实现: 整数向字符串的转换,返回字符串指针,并在main函数中调用printf显示. #include<stdio.h> ...

  3. 初识MVC之建项

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到 ...

  4. VB.NET机房收费系统总结

    总感觉这次机房收费系统非常有份量,一直没有下手总结,从2014-7-27至2014-9-29.这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变.在.NE ...

  5. linux下的静态库创建与查看,及如何查看某个可执行依赖于哪些动态库

    linux下的静态库创建与查看,及如何查看某个可执行依赖于哪些动态库   创建静态库:ar -rcs test.a *.o查看静态库:ar -tv test.a解压静态库:ar -x test.a 查 ...

  6. javascript在html直接传值

    function getUrlParam(url, name) { var pattern = new RegExp("[?&]" + name + "\=([^ ...

  7. Controller总结

    下图显示了组建之间的基本控制流程 1.1控制器工厂.动作调用器 控制器工厂负责创建对请求进行服务的控制器实例 动作调用其负责查找并调用控制器类中的动作方法. 1.2自定义控制器工厂 namespace ...

  8. 后缀自动机 (WJMZBMR讲稿的整理和注释)

    链接放在这里,有点难理解,至少我个人是的. 后缀自动机是一种有限状态自动机,其功能是识别字符串是否是母串的后缀.它能解决的问题当然不仅仅是判断是不是后缀这种事,跟字符串的连续子串有关的问题都可以往这个 ...

  9. Python3之时间模块详述

    Python3之时间模块  time & datetime & calendar 一. 概述 python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能. 时间元组:很多p ...

  10. [原创]c语言中const与指针的用法

    最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题:   1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a;  ...