第4章 进程间通信new.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 进程间通信new

4.4.2 进程通信分类 Win32的IPC机制: NetBIOS,Socket —— 网间IPC机制的典型应用 邮槽,管道,事件, 文件映射 1) 邮槽(Mailslot) 单向IPC:将消息传送或者广播给其他进程 适用区间:同一计算机的不同进程之间和不同计算机的进程之间 可靠性:不可靠(广播) 当在一个小范围内需要实时发布(广播)消息时,可以利用邮槽。 2) 命名管道(Named Pipes) 单向或双向的IPC 适用区间:同一计算机的不同进程之间和不同计算机的进程之间 可靠性:可靠 3) 事件(Events) 双向IPC 适用区间:主要用于同一台计算机上多个进程间通知一些简单事件,也用于进程同步。 (如:NetBIOS命令的异步调用方式) 4) 文件映射(FileMapping) 不支持网间通信 同一台计算机上的多个进程可以利用文件映射共享数据。 ——单机多进程通信最有效的方法。 4.5 内存文件映射 ——拿文件直接当作系统的内存使用 作用: 1. 直接用内存映射文件来访问磁盘上的数据文件,无需再进行文件的I/0操作,不必对文件内容进行缓存。 2. 用来在多个进程之间共享数据。一个进程使用另一个进程的文件映射对象在自己的虚拟地址空间中建立一个相同的视图,从而共享内存,利用这种方式使得进程之间交换数据。 内存文件映射的共享数据特性是进程间通信的主要手段。 要利用内存文件映射实现进程间通信主要步骤有如下四步: 1.CreateFileMapping??? 创建一个文件映射内核对象 2.OpenFileMapping 打开映射对象 3.MapViewOfFile?????? 将文件数据映射进进程地址空间 4.UnmapViewOfFile???? 从进程地址空间解除这个映射 4.5.1 内存文件映射使用到的函数 1. 创建内存文件映射(CreateFileMapping) 函数创建一个有名或无名的文件映射对象,成功返回文件映射对象的句柄,失败返回NULL。 HANDLE CreateFileMapping( ?HANDLE hFile,??? ??//物理文件句柄 ?LPSECURITY_ATTRIBUTES lpAttributes, //安全设置 ? DWORD flProtect, //保护设置 ?DWORD dwMaximumSizeHigh,???? //高位文件大小??????? ? DWORD dwMaximumSizeLow,??? //低位文件大小???????? ?LPCTSTR lpName? //共享内存名称 ); 参数说明如下: hFile:想要映射到地址空间中的文件对象的句柄。对于磁盘文件句柄可以用CreateFile得到;对于共享内存区操作,指定为0xFFFFFFF 。 lpAttributes:安全设置, 一般设置为NULL, 使用默认的安全配置。 flProtect:指定文件映射区物理存储器的页面保护属性。可取如表4.2中的三种属性。 dwMaximumSizeHigh和dwMaximumSizeLow :指定该文件映射的最大字节数。前者用于设定较高的32位,后者设定较低的32位,一般我们现在所用的机器都是32位的,所以高32位置0。 lpName:以0结尾的字符串,用于给该文件映射对象设置一个名字。该名字用于与其他进程共享文件映射对象。 2.打开文件映射对象OpenFileMapping 成功则返回文件映射对象的句柄,否则NULL。 HANDLE OpenFileMapping( DWORD dwDesiredAccess; BOOL bInheritHandle; LPCTSTR lpName ); 参数说明: dwDesiredAccess:指定对文件映射对象的访问方式。 bInheritHandle:指定该文件对象句柄是否可以被继承。(TURE,FALSE) lpName:以0结尾在字符串,用于指定一个已经创建的文件映射对象的名字。(系统通过这个名字实现与其他进程共享文件映射对象,进而实现进程间的数据交换) 3.将文件数据映射进进程地址空间MapViewOfFile???? LPVOID MapViewOfFile( HANDLE

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档