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. HDU 2817 EASY题

    #include <iostream> #include <cstdio> using namespace std; const __int64 MOD=200907; __i ...

  2. ubuntu12.04安装翻译软件stardict及卸载

    下载: 1.打开软件中心.搜索stardict,星际译王,即ubuntu下的翻译软件. 点击下载就可以. 2.打开终端,输入 $sudo apt-get install stardict 按提示就可以 ...

  3. java 正则表达式语法

    java 正则表达式语法 标签: 正则表达式javawindowsvbscriptscripting电话 2012-05-20 10:11 6705人阅读 评论(1) 收藏 举报  分类: javaS ...

  4. html5开发手机打电话发短信功能,html5的高级开发,html5开发大全,html手机电话短信功能具体解释

    在非常多的手机站点上,有打电话和发短信的功能,对于这些功能是怎样实现的呢.事实上不难,今天我们就用html5来实现他们. 简单的让你大开眼界.HTML5 非常easy写,但创建网页时,您常常须要反复做 ...

  5. tensorflow利用预训练模型进行目标检测(三):将检测结果存入mysql数据库

    mysql版本:5.7 : 数据库:rdshare:表captain_america3_sd用来记录某帧是否被检测.表captain_america3_d用来记录检测到的数据. python模块,包部 ...

  6. 再续iOS开发中的这些权限

    前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...

  7. 2019黑马JAVAEE57期基础班就业班(全套)

    黑马java57期 百度网盘 2019黑马JAVAEE57期基础班就业班(全套)百度网盘 下载 Spring全家桶解决方案 - 微服务认证解决方案(JWT) - 微服务网关解决方案(Zuul) 黑马j ...

  8. tomcat映射路径(应用程序基本目录)的配置方法

    tomcat映射路径的配置方法 一.默认配置 位置:/conf 文件夹里的server.xml文件 <Host appBase="webapps"> appBase:可 ...

  9. SQL Server 查询所有包含某文本的存储过程、视图、函数

    •  方法一:查询所有包含某文本的存储过程.视图.函数 SELECT * from sysobjects o, syscomments s where o.id = s.id AND text LIK ...

  10. 使用 Travis-CI 的五个理由

    I use the service of travis-ci now for a year. In that time the continuous integration has often poi ...