匿名管道概述
既然是匿名管道的话,自然,就是没有名字的管道了,还有一种管道呢,叫做命名管道,
命名管道的功能是很强大的,匿名管道在命名管道面前,功能那是简陋的不行的,
至于命名管道的话,会留到下一篇博文中介绍的,
匿名管道正因为提供的功能很单一,所以它所需要的系统的开销也就比命名管道小很多,
在本地机器上可以使用匿名管道来实现父进程和子进程之间的通信,
这里需要注意两点,第一就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信,
第二就是实现的是父进程和子进程之间的通信,而不是任意的两个进程。
然后得话还顺便介绍匿名管道的另外一种功能,其通过匿名管道可以实现子进程输出的重定向,
何为输出重定向呢?还请听下面详解:
比如我现在建立一个 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");
}
那么在默认下,编译运行上面的代码时,Windows 会弹出一个黑框框,并且在这个黑框框中显示一些信息,
为什么一定要将输出的信息显示在这个黑框框中呢?有没有办法让其显示在我们自己定义的文本框中呢?
那下面我们就试试通过匿名管道将 这个黑框中的的信息显示到一个编辑框中。
这是父进程 是一个控制台程序
// NoNamePipeP.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;
HANDLE hReadPipe,hWritePipe;
void createpipe();
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dw;
char * pSendData="hello";
//cout<<"Hello World!"<<endl;
cout<<pSendData;
createpipe();
WriteFile(hWritePipe,pSendData,256,&dw,NULL);
system("pause");
return 0;
}
void createpipe()
{
SECURITY_ATTRIBUTES pipeSA = {sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};
PROCESS_INFORMATION ProcInfo;
STARTUPINFO StartupInfo;
::C