2011-10-23 175 views
0

我试图在命令行shell和我的应用程序之间创建一个管道。标准输入/输出重定向,输入不工作

这是我到目前为止的代码: http://pastebin.com/uupd4aXi

我所试图做的是写“WHOAMI”到标准输入和获得回报等同于命令。 如果我注释掉writeInput函数,readoutput将成功打印标准cmd打印输出。但是,如果我不这样做,writeinput卡住在一个无限循环的:

for (;;) 
    { 

     bSuccess = WriteFile(hSTD_IN_WRITE, chBuf, sizeof(chBuf), &dwWritten, NULL); 
     if (! bSuccess) break; 
    } 

如果我删除if语句和手动造成环路休息,我仍然只得到CMD打印输出消息,但不响应我的命令“whoami”。

我在做什么错?

回答

1

您正陷入redirecting both stdin and stout but processing them serially的陷阱。

如果您只想运行whoami程序并捕获输出,则不需要cmd.exe并尝试将whoami.exe作为其输入。直接运行whoami.exe并捕获其输出。

+0

感谢您的回应,但不幸的是,命令“whoami”只是一个例子,所以我不能只运行whoami.exe,如果我想让“回声1”的结果可以说会发生什么。那篇文章是使用缓冲,但是,我不完全明白这是什么意思,你能帮我一下吗? –

+0

'cmd.exe/c echo 1'会运行命令,而不需要你通过stdin输入数据。它也摆脱了旗帜,所以一石二鸟。 –

+0

谢谢!终于搞定了。虽然这在我看来似乎是一种解决方法,但它确实能完成这项工作。我会很好奇,但要找到“正确”的方法 –

相关问题