3

我编写了一个小型 C 程序,用于readline("")从标准输入读取输入。我没有从终端与其交互,而是编写了一个测试工具来执行 C 程序并为其提供输入:

test harness --stdout--> | --stdin--> C program
         ^------stdin--- | <--stdout-----/

这个测试工具正在接收其输出的回声,即使程序本身也是如此。为什么 readline() 回显其输入,我可以禁用它吗?或者我不应该在非交互式环境中使用 readline() 吗?

4

2 回答 2

4

readline库仅用于交互式使用。您的程序可能应该回退到使用fgets()ifisatty(STDIN_FILENO)为 false。

于 2013-03-17T22:50:07.983 回答
2

默认情况下,Readline 将用户输入回显到标准输出,但它是可配置的。

来自 readline文档

变量:文件 * rl_outstream

Readline 对其执行输出的 stdio 流。

只需在程序的开头设置rl_outstreamstderr,因此它将回显到 stderr;例如:

#include <readline/readline.h>
#include <stdio.h>
...
int main() {
    rl_outstream = stderr;
...

事实上bash(1)也是这样做的。

而且我也同意,如果您的程序不是为交互使用而设计的,您应该使用另一种更简单的方法从标准输入获取行,例如getline(3)fgets(3)getchar(3)

于 2020-04-15T09:37:15.137 回答