在程序设计中,有时候需要调用一些控制台程序并取得其在控制台上的输出,如
VS
的
IDE
就调用了
cl.exe
、
link.exe
等控制台的程序,并可将这些程序的输出在
IDE
中显示出来。
曾经很迷惑这个功能的实现,直到有一天看到下面的参考代码才恍然大悟,原来一切都这么简单,只不过用了
CreatePipe
、
CreateProcess
、
ReadFile
寥寥几个函数而已。特此记下以供参考。
#include
"Stdafx.h"
#include
<windows.h>
#include
<stdio.h>
#include
<math.h>
#include
<stdlib.h>
/* protos */
DWORD WINAPI ReadFromPipe(LPVOID args);
/* globals */
#define
CHUNK 25
#define
STATICBUFFERSIZE 1000
typedef
struct
{
HANDLE pipe;
char
buffer[STATICBUFFERSIZE];
} pipeinfo;
pipeinfo Out = {INVALID_HANDLE_VALUE,
'/0'
};
pipeinfo Err = {INVALID_HANDLE_VALUE,
'/0'
};