如何在C语言中准确地回显std输出
我基本上是在做一个终端包装。我想让我的程序从stdin中读取,对于输入的任何输入,即使它是错误的,也要按原样回显 现在,我正在做:如何在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
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)代码>是不需要的,在这里使用可能有害。一些输出可能会出现标准错误-错误消息主要写入标准错误,因为这就是它的用途。你似乎没有改变方向。你实际上给自己设定了一个非常困难的任务。