admin 管理员组

文章数量: 1086019


2024年3月13日发(作者:avantage中文切换)

ipc双向替换符号

匿名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流

动,但是两端均可读写,而且只能在具有亲缘关系的进程间使用。进程的

亲缘关系通常是指父子进程关系。匿名管道无法再网络上使用。

有名管道 (named pipe) : 有名管道也是半双工的通信方式,可以实

现网络通信(两个端的),但是它允许无亲缘关系进程间的通信。不能实

现多个进程间的通信。

邮件槽(Mailslots): 邮件槽(Mailslots)提 供进程间单向通信能

力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽

客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消 息

一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件

槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向

通信。

通过邮件槽可以给本地计算机上的邮件槽、其它计算机上的邮件槽或

指定网络区域中所有计算机上有同样名字的邮件槽发送消息。广播通信的

消息长度不能超过400字节,非广播消息的长度则受邮件槽服务器指定的

最大消息长度的限制。

邮件槽与命名管道相似,不过它传输数据是通过不可靠的数据报(如

TCP/IP协议中的UDP包)完成的,一旦网络发生错误则无法保证消息正

确地接收,而命名管道传输数据则是建立在可靠连接基础上的。不过邮件

槽有简化的编程接口和给指定网络区域内的所有计算机广播消息的能力,

所以邮件槽不失为应用程序发送和接收消息的另一种选择。

文件映射:文件映射(Memory-Mapped Files)能使进程把文件内

容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O

操作,只需简单的指针操作就可读取和修改文件的内容。

Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己

的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或

修改文件的内容,实现了对文件中数据的共享。

应用程序有三种方法来使多个进程共享一个文件映射对

象。

(1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的

句柄。

(2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象

指定一个名字(可与文件名不同)。第二个进程可通过这个名字打开此文

件映射对象。另外,第一个进程也可以通过一些其它IPC机制(有名管道、

邮件槽等)把名字传给第二个进程。

(3)句柄复制:第一个进程建立文件映射对象,然后通过其它IPC机

制(有名管道、邮件槽等)把对象句柄传递给第二个进程。第二个进程复

制该句柄就取得对该文件映射对象的访问权限。

文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性。

但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还

必须控制进程间的同步。

信号量( semophore ) : 信号量是一个计数器,可以用来控制多个

进程对共享资源的访问。不是用于交换大批数据,而用于多线程之间的同

步.常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源。

因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列( message queue ) : 消息队列是由消息的链表,存放在

内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道

只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 ( signal ) : 信号是一种比较复杂的通信方式,用于通知接收进

程某个事件已经发生。

共享内存( shared memory ):共享内存就是映射一段能被其他进程

所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而

专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程

间的同步和通信。

套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信

机制不同的是,它可用于不同机器间的进程通信。

剪切板(Clipped Board)剪贴板(Clipped Board)实质是Win32

API中一组用来传输数据的函数和消息,为Windows应用程序之间进行

数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机

制为不同应用程序之间共享不同格式数据提供了一条捷径。当用户在应用

程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式

放在剪贴板上。然后任何其它应用程序都可以从剪贴板上拾取数据,从给

定格式中选择适合自己的格式。

剪贴板是一个非常松散的交换媒介,可以支持任何数据格式,每一

格式由一无符号整数标识,对标准(预定义)剪贴板格式,该值是Win32

API定义的常量;对非标准格式可以使用Register Clipboard Format函

数注册为新的剪贴板格式。利用剪贴板进行交换的数据只需在数据格式上

一致或都可以转化为某种格式就行。但剪贴板只能在基于Windows的程

序中使用,不能在网络上使用。

动态数据交换

动态数据交换(DDE)是使用共享内存在应用程序之间进行数据交换

的一种进程间通信形式。应用程序可以使用DDE进行一次性数据传输,

也可以当出现新数据时,通过发送更新值在应用程序间动态交换数据。

DDE和剪贴板一样既支持标准数据格式(如文本、位图等),又可以支持

自己定义的数据格式。但它们的数据传输机制却不同,一个明显区别是剪

贴板操作几乎总是用作对用户指定操作的一次性应答-如从菜单中选择

Paste命令。尽管DDE也可以由用 户启动,但它继续发挥作用一般不必

用户进一步干预。DDE有三种数据交换方式:

(1) 冷链:数据交换是一次性数据传输,与剪贴板相同。

(2) 温链:当数据交换时服务器通知客户,然后客户必须请求新的数

据。

(3) 热链:当数据交换时服务器自动给客户发送数据。

DDE交换可以发生在单机或网络中不同计算机的应用程序之间。开发

者还可以定义定制的DDE数据格式进行应用程序之间特别目的IPC,它们

有更紧密耦合的通信要求。大多数基于Windows的应用程序都支持DDE。


本文标签: 进程 消息 文件