利用管道获取控制台程序的标准输出
2015-01-22 21:35
274 查看
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");
}
#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");
}
相关文章推荐
- 利用管道获取控制台程序的标准输出
- VC 匿名管道获取控制台程序的输出
- 匿名管道实现获取控制台程序输出
- 利用windows管道技术捕获标准输出
- VC2010 MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息
- c# 调用控制台程序并传参 获取控制台输出(解释器的前台处理)
- c# 调用控制台程序并传参 获取控制台输出(解释器的前台处理)
- 在Windows下获取控制台(DOS)下可执行文件的标准输入输出
- C# 调用控制台程序,并获取输出写入文件
- MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息
- 怎样在图形界面中实时捕获控制台程序的标准输出
- 管道技术获取控制台输出
- 管道技术获取控制台输出
- 管道技术获取控制台输出
- 在图形界面中实时捕获控制台程序的标准输出
- 获取控制台窗口的句柄(HWND)和程序中输出回车键
- 管道技术获取控制台输出
- Delphi中利用管道重定向实现对控制台(Console)程序的操作
- [ZT]如何在图形界面中实时捕获控制台程序的标准输出,让图形界面程序向控制台程序输入特定的命令行指令
- 利用管道实现控制台程序输入输出的重定向