利用管道获取控制台程序的标准输出
本文章已收录于:

作者同类文章
X
版权声明:本文为博主原创文章,未经博主允许不得转载。
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);
- }
#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