windows进程间各种通信方式浅谈

windows进程间各种通信方式浅谈

ID:21062669

大小:30.25 KB

页数:11页

时间:2018-10-19

windows进程间各种通信方式浅谈_第1页
windows进程间各种通信方式浅谈_第2页
windows进程间各种通信方式浅谈_第3页
windows进程间各种通信方式浅谈_第4页
windows进程间各种通信方式浅谈_第5页
资源描述:

《windows进程间各种通信方式浅谈》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Windows进程间各种通信方式浅谈1、Windows进程间通信的各种方法  进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。  多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)  提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(InterProcess Communication, IPC),  进程通信就是指不同进程间进行数据共享和数据交换。  正

2、因为使用Win32 API进行进程通信方式有多种,如何选择恰当的通信方式就成为应用开发中的一个重要问题,  下面本文将对Win32中进程通信的几种方法加以分析和比较。  2、 进程通信方法  2.1 文件映射  文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,  只需简单的指针操作就可读取和修改文件的内容。  Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,  实现了对文件中数据的共享。  应用

3、程序有三种方法来使多个进程共享一个文件映射对象。  (1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。  (2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字(可与文件名不同)。第二个进程可通过这个名字打开此文件映射对象。  另外,第一个进程也可以通过一些其它IPC机制(有名管道、邮件槽等)把名字传给第二个进程。  (3)句柄复制:第一个进程建立文件映射对象,然后通过其它IPC机制(有名管道、邮件槽等)把对象句柄传递给第二个进程。  第二个进程复制该句柄就取得对该文件映射对象的访问权限。  文件映射是在多个进程间共享数据的非常有效方法,有较好

4、的安全性。但文件映射只能用于本地机器的进程之间,不能用于网络中  ,而开发者还必须控制进程间的同步。  2.2 共享内存  Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF来代替 文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用 文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。  a.设定一块共享内存区域  HANDLE CreateFileMapping(HANDLE,L

5、PSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)// 产生一个file-mapping核心对象  LPVOID MapViewOfFile(   HANDLE hFileMappingObject,   DWORD dwDesiredAcess,   DWORD dwFileOffsetHigh,   DWORD dwFileOffsetLow,   DWORD dwNumberOfBytesToMap  );得到共享内存的指针  b.找出共享内存  决定这块内存要以点对点(peer to peer)的形式呈现每个进程都必须有相同

6、的能力,产生共享内存并将它初始化。每个进程都应该调用CreateFileMapping(),  然后调用GetLastError().如果传回的错误代码是 ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区 域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第 一位,并接下来将共享内存初始化。还是要使用client/server架构中只有server进程才应该产生并初始化共享内存。  所有的进程都应该使用  HANDLE OpenFileMapping(DWORD dwDesiredAccess,  BOOL bInheritHandle,

7、  LPCTSTR lpName);  再调用MapViewOfFile(),取得共享内存的指针  c.同步处理(Mutex)  d.清理(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);  CloseHandle()  2.3 匿名管道  管道(Pipe)是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。管道可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。