进程间通信 - 匿名管道实现

前面的两篇博文分别介绍了通过剪贴板和通过邮槽来实现进程之间的通信,

其中剪贴板呢,是用来实现本地两个进程之间的通信,

而邮槽则既可以实现本地两个进程之间的通信,也可以实现本地进程和服务器进程的通信,

当然,上面这两种方式都是有局限性的,比如剪贴板就只能实现本地进程之间的通信,

而在邮槽中,虽然是既可以实现本地进程之间的通信,又能实现本地进程和远程服务器进程的通信,

但是使用邮槽的话,服务端只能接收数据,不能发送数据,而客户端只能发送数据而不能接收数据。

而本篇博文介绍的这个通过匿名管道来实现进程之间的通信的话,

局限性就显得更加严重了,

第一:匿名管道只能实现本地进程之间的通信,不能实现跨网络之间的进程间的通信。

第二:匿名管道只能实现父进程和子进程之间的通信,而不能实现任意两个本地进程之间的通信。

匿名管道概述

既然是匿名管道的话,自然,就是没有名字的管道了,还有一种管道呢,叫做命名管道,

命名管道的功能是很强大的,匿名管道在命名管道面前,功能那是简陋的不行的,

至于命名管道的话,会留到下一篇博文中介绍的,

匿名管道正因为提供的功能很单一,所以它所需要的系统的开销也就比命名管道小很多,

在本地机器上可以使用匿名管道来实现父进程和子进程之间的通信,

这里需要注意两点,第一就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信,

第二就是实现的是父进程和子进程之间的通信,而不是任意的两个进程。

然后得话还顺便介绍匿名管道的另外一种功能,其通过匿名管道可以实现子进程输出的重定向,

何为输出重定向呢?还请听下面详解:

比如我现在建立一个 Win32 的 Console 程序,然后在其中使用如下代码来输出一些信息:

#include <iostream> using namespace std;   int main(int argc, char * argv) { cout<<"Zachary XiaoZhen "<<endl<<endl; cout<<"Happy New Year"<<endl<<endl; system("pause"); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfsfs.html