如何在C语言中准确地回显std输出

如何在C语言中准确地回显std输出,c,shell,C,Shell,我基本上是在做一个终端包装。我想让我的程序从stdin中读取,对于输入的任何输入,即使它是错误的,也要按原样回显 现在,我正在做: FILE *output = popen(buffer, "r"); memset(buffer, '\0', BUFF_SIZE * 2); while (fgets(buffer, sizeof(buffer), output) != 0) { printf("%s", bu

我基本上是在做一个终端包装。我想让我的程序从stdin中读取,对于输入的任何输入,即使它是错误的,也要按原样回显

现在,我正在做:

        FILE *output = popen(buffer, "r");
        memset(buffer, '\0', BUFF_SIZE * 2);
        while (fgets(buffer, sizeof(buffer), output) != 0)
        {
            printf("%s", buffer);
            memset(buffer, '\0', BUFF_SIZE * 2);
        }
        pclose(output);
        }
当我使用
popen
调用shell命令时,但是在某些情况下,例如,当找不到命令时,使用
popen
返回的输出与使用没有包装器的终端时不完全相同。例如,如果我输入
$asd
,linux终端将返回

No command 'asd' found, but there are 24 similar ones
asd: command not found
popen
将返回:

sh: 1: asd not found

我想要默认的终端响应,而不是
popen
返回的响应,这可能吗?如果是这样,怎么做?

是的,我意识到了,但是我在哪里可以找到shell终端正在使用?很抱歉让您的评论挂起——当我意识到您有大量的学习要做时,我删除了我最初的评论。老实说,我认为最好的方法是在互联网上进行大量研究,包括查看现有代码,而不是每次遇到问题都在这里询问。您将在一个更好的地方结束,因为有许多有趣的问题您必须理解,并且理解这些原则将比仅仅拥有您不完全理解的工作代码更有价值。祝你好运shell在交互和非交互模式下的行为不同。您可以通过使用
-i
选项来强制bash以交互模式运行。本文档描述了交互式shell模式与非交互式模式的区别:。也就是说,您很可能会在强制交互行为时遇到麻烦。
memset(buffer,'\0',BUFF_SIZE*2)是不需要的,在这里使用可能有害。一些输出可能会出现标准错误-错误消息主要写入标准错误,因为这就是它的用途。你似乎没有改变方向。你实际上给自己设定了一个非常困难的任务。