Windows下进程间通信(interprocess communications,IPC)

根据msdn整理,有以下9种通信方式,

A与B通信

1、剪贴板(Clipboard)

信息交换方式:A将数据放在剪贴板,由B访问剪贴板以访问共享数据。

数据格式:格式松散,只需要两个进程以约定的格式即可。

是否支持网络:支持

2、COM(component object model)

信息交换方式:当A连接或嵌入B所使用的数据时,自动调用B进程来编辑数据。相当于扩展了A的功能。

数据格式:B所使用的特定格式

是否支持网络:未知

3、数据拷贝(Data Copy)

信息交换方式:A使用WM_COPYDATA消息向B发送数据。B需要能够识别出数据格式和识别出发送者A。WM_COPYDATA只可以能过SendMessage发送,如果使用PostMessage,接收方就不会收到发送的消息,因为PostMessage不是同步的调用,这样就无法保证在接收方收到消息的时个WM_COPYDATA中的数据还正确的保存在内存中。A通过进程名字来得到B进程主窗体的句柄,之后向B派送消息。

数据格式:WM_COPYDATA消息,COPYDATASTRUCT结构体(包含指针指向所要发送的数据)

是否支持网络:未知

4、DDE(Dynamic Data Exchange)

剪贴板方式的一种延伸。DDE数据交换本质上是一组Windows消息,再通过剪贴板或共享内存等方法进行数据交换。此种方式还支持一个进程处于多个对话中,但两个进程只能有一个对话。

信息交换方式:1,client(A)初始化对话,server(B)回应;2,通过以下方式交换数据:server响应client的请求向其发送数据;client向server发送非请求数据;client请求server在数据更改时通知server;client请求server在数据更改时发送数据给client;server响应client的请求执行一条命令;3、client或server终止。

数据格式:参数传递可通过剪贴板,全局变量,共享内存对象

是否支持网络:支持

5、文件映射(File Mapping)

将一个文件当做进程间的共享内存块。进程使用指针操作来检查和修改文件的内容。每个进程提供自己的内存块来读写这个文件。该文件读写需使用同步机制,如semaphore。这是一种高效的多个进程间共享数据的方式,可由操作系统提供权限控制以保证数据安全,但需要开发者提供同步机制。

信息交换方式:共享文件

数据格式:文件

是否支持网络:否

6、邮件槽(Mailslot)

这是一种单向的通信。创建邮件槽的进程B成为邮件槽服务器,其他进程A向邮件槽发消息,成为邮件槽客户端。进入的消息均添加到邮件槽的末尾,消息一直保存在邮件槽中,直到被B读出。可以通过多个邮件槽实现双向通信。

信息交换方式:向邮件槽写消息

数据格式:邮件槽消息

是否支持网络:支持

7、管道(Pipes)

分为两种:匿名管道和有名管道。两种管道可单向,可双向。匿名管道用于父子进程间通信,通过重定向子进程的输入输出来和父进程通信,要实现双向通信,需要建两个匿名管道。匿名管道不能用于多台机器间,也不能用于没有关系的进程。有名管道可用于没有关系的进程和机器间。其过程如下:进程B创建一个有名管道,名字为其他进程A所知道,之后进程A根据这个名字打开管道另一端,对管道的访问权限由B决定。之后A与B可通过在管道上的读写操作来实现数据交换。

信息交换方式:通过管道

数据格式:管道内的数据

是否支持网络:匿名管道不支持,有名管道支持

8、RPC

RPC允许远程调用函数,使IPC像调用函数一样简单。支持多个机器上进程通信。Windows提供的RPC与开放软件基金会(Open Software Foundation)的分布式计算环境(Distributed Computing Environment)兼容,因而可以支持非windows的机器。

信息交换方式:未知

数据格式:未知

是否支持网络:支持

9、windows套接字(Windows Sockets)

这是一种与协议无关的接口,充分利用底层协议的通信功能。Windows的sockets可与其他系统上的Sockets实现相互通信。主要用于网络通信。

信息交换方式:未知

数据格式:未知

是否支持网络:支持

转载于:https://www.cnblogs.com/mascure/p/3407159.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值