我正在尝试在命令行shell和我的应用程序之间创建一个管道。
这是我到目前为止的代码: http://pastebin.com/uupd4aXi
我要做的是将“whoami”写入stdin并获得相当于该命令的返回值。 如果我注释掉writeinput函数,readoutput会成功打印标准cmd打印输出。但是,如果我不这样做,writeinput会陷入无限循环:
for (;;)
{
bSuccess = WriteFile(hSTD_IN_WRITE, chBuf, sizeof(chBuf), &dwWritten, NULL);
if ( ! bSuccess ) break;
}
如果我删除了if语句并手动导致循环中断,我仍然只获取cmd打印输出消息,但没有响应我的命令“whoami”。
我做错了什么?
答案 0 :(得分:1)
您正在遇到redirecting both stdin and stout but processing them serially的陷阱。
如果您要执行的只是运行whoami
程序并捕获输出,那么您不需要cmd.exe
并尝试将whoami.exe
作为输入。只需直接运行whoami.exe
并捕获其输出。