Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 标准输入/标准输出重定向,输入不工作_C_Cmd_Stdout_Pipe_Stdin - Fatal编程技术网

C 标准输入/标准输出重定向,输入不工作

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

我试图在命令行shell和我的应用程序之间创建一个管道

这是我目前掌握的代码:

我试图做的是将“whoami”写入stdin,并获得与该命令等效的返回。 如果我注释掉writeinput函数,readoutput将成功打印标准cmd打印输出。但是,如果我不这样做,writeinput将在以下位置陷入无限循环:

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输入数据。它也摆脱了旗帜,所以一石二鸟。谢谢!终于成功了。虽然在我看来这似乎是一个解决办法,但它确实起到了作用。不过,我很想找到“适当”的方法,见文章末尾的“避免这个问题”一段。