为什么readline()将stdin回显到stdout?

时间:2013-03-17 22:44:00

标签: c readline

我编写了一个小型C程序,它使用readline("")来读取stdin的输入。我没有从终端与它进行交互,而是编写了一个执行C程序并给它输入的测试工具:

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

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

2 个答案:

答案 0 :(得分:3)

readline库仅供交互式使用。如果fgets()为假,您的计划应该可以使用isatty(STDIN_FILENO)

答案 1 :(得分:2)

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

在阅读行documentation中:

变量:FILE * rl_outstream

Readline向其输出输出的stdio流。

只需在程序开始时将rl_outstream设置为stderr,它就会回显到stderr;例如:

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

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

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