利用管道获取控制台程序的标准输出

来源:互联网 发布:交换机有mac地址吗 编辑:程序博客网 时间:2024/06/06 01:29

1.该程序调用控制台程序hello.exe,通过管道获取到hello.exe的标准输出数据,并打印到当前程序的标准输出。

#include <Windows.h>#include <iostream>#include <string>using namespace std;void invoke(string exe);int main(int argc, char* argv[]){string exe = "hello.exe";invoke(exe);return 0;}void invoke(string exe){SECURITY_ATTRIBUTES saPipe;         saPipe.nLength = sizeof(SECURITY_ATTRIBUTES);        saPipe.lpSecurityDescriptor = NULL;        saPipe.bInheritHandle = TRUE;HANDLE hReadPipe, hWritePipe;BOOL bSuccess = CreatePipe(&hReadPipe, &hWritePipe, &saPipe, 0);  if(!bSuccess) return ;PROCESS_INFORMATION pi; STARTUPINFO si;         memset(&si,0,sizeof(si));         si.hStdInput=hReadPipe;        si.hStdOutput=hWritePipe;        si.dwFlags=STARTF_USESTDHANDLES;        si.cb=sizeof(si); if(CreateProcess(NULL,(char*)exe.c_str(),NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)){CloseHandle(pi.hThread);   const int max = 500;char buf[max] = {0};DWORD dw;if(ReadFile(hReadPipe,buf,max-1,&dw,NULL)){cout<<buf<<endl;//ZeroMemory(buf,max);}CloseHandle(pi.hProcess);   }CloseHandle(hReadPipe);CloseHandle(hWritePipe);}
输出结果为:


2. hello.exe的主代码

#include <stdio.h>void main(){printf("hello!\n");}

0 0