C 标准输入/标准输出重定向,输入不工作
我试图在命令行shell和我的应用程序之间创建一个管道 这是我目前掌握的代码: 我试图做的是将“whoami”写入stdin,并获得与该命令等效的返回。 如果我注释掉writeinput函数,readoutput将成功打印标准cmd打印输出。但是,如果我不这样做,writeinput将在以下位置陷入无限循环:C 标准输入/标准输出重定向,输入不工作,c,cmd,stdout,pipe,stdin,C,Cmd,Stdout,Pipe,Stdin,我试图在命令行shell和我的应用程序之间创建一个管道 这是我目前掌握的代码: 我试图做的是将“whoami”写入stdin,并获得与该命令等效的返回。 如果我注释掉writeinput函数,readoutput将成功打印标准cmd打印输出。但是,如果我不这样做,writeinput将在以下位置陷入无限循环: for (;;) { bSuccess = WriteFile(hSTD_IN_WRITE, chBuf, sizeof(chBuf), &dwWr
for (;;)
{
bSuccess = WriteFile(hSTD_IN_WRITE, chBuf, sizeof(chBuf), &dwWritten, NULL);
if ( ! bSuccess ) break;
}
如果我删除If语句并手动导致循环中断,我仍然只得到cmd printout消息,而没有得到命令“whoami”的响应
我做错了什么?你正陷入这样的陷阱 如果您只想运行
whoami
程序并捕获输出,则不需要cmd.exe
并尝试将whoami.exe
作为输入。直接运行whoami.exe
并捕获其输出
编辑:更新文章链接:
感谢您的回复,但不幸的是,“whoami”命令只是一个示例,所以我不能只运行whoami.exe,如果我想得到“echo 1”的结果会发生什么。那篇文章说要使用缓冲,但我不太明白它的意思,你能帮我一下吗
cmd.exe/c echo 1
将运行该命令,而不需要你通过stdin输入数据。它也摆脱了旗帜,所以一石二鸟。谢谢!终于成功了。虽然在我看来这似乎是一个解决办法,但它确实起到了作用。不过,我很想找到“适当”的方法,见文章末尾的“避免这个问题”一段。