【问题标题】:Stdin/Stdout redirection , input not working标准输入/标准输出重定向,输入不起作用
【发布时间】:2011-10-23 07:53:00
【问题描述】:

我正在尝试在命令行 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”的响应。

我做错了什么?

【问题讨论】:

    标签: c cmd stdout pipe stdin


    【解决方案1】:

    你陷入了redirecting both stdin and stout but processing them serially的陷阱。

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

    编辑:更新文章链接: https://devblogs.microsoft.com/oldnewthing/20110707-00/?p=10223

    【讨论】:

    • 感谢您的回复,但不幸的是命令“whoami”只是一个示例,所以我不能只运行 whoami.exe,如果我想要“echo 1”的结果会发生什么让说。那篇文章说要使用缓冲,但我不完全明白是什么意思,你能帮我吗
    • cmd.exe /c echo 1 将运行该命令,而无需您通过标准输入输入数据。它也摆脱了旗帜,所以一石两鸟。
    • 谢谢!终于搞定了虽然在我看来这似乎是一种解决方法,但它确实可以完成这项工作。不过,我很想找到“正确”的做法
    • 见文末“避免这个问题”段落。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多