如何创建仅重定向输入的子进程

时间:2011-07-19 20:07:49

标签: winapi

要在管道中创建子流程,MSDN中有一个很好的例子。当您的父进程是控制台应用程序时,您可以通过以下方式轻松处理子进程标准输出:

HANDLE my_own_pipe_read_handle = 0, my_own_pipe_write_handle = 0;
// create pipe
CreatePipe( &my_own_pipe_read_handle, &my_own_pipe_write_handle, NULL, 0 );
// create STARTUPINFO
STARTUPINFO siStartInfo;
ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
// fill in STARTUPINFO
siStartInfo.cb = sizeof(STARTUPINFO); 
siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
siStartInfo.hStdInput = my_own_pipe_read_handle;
siStartInfo.dwFlags |= STARTF_USESTDHANDLES;

我的问题是:当主机进程是Win32(hStdError)应用程序时,我应该给hStdOutputWinMain值什么(所以它没有标准输出和标准错误)?你会怎么做?

最后我解决了我的TCP / IP项目,非常感谢您的帮助。目前的解决方案是未来的教授。 :)

2 个答案:

答案 0 :(得分:0)

确保您未在​​STARTF_USESTDHANDLES结构中添加STARTUPINFO标记。句柄将被忽略。

答案 1 :(得分:0)

我相信你也必须为输出提供一个管道。这可能会导致一些棘手的情况 - 我建议你阅读Raymond Chen关于这个主题的recent posts