代码之家  ›  专栏  ›  技术社区  ›  hertzsprung

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

  •  3
  • hertzsprung  · 技术社区  · 12 年前

    我写了一个小的C程序,它使用 readline("") 从stdin读取输入。我没有从终端与它交互,而是编写了一个测试线束,它执行C程序并为它提供输入:

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

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

    2 回复  |  直到 12 年前
        1
  •  5
  •   user149341 user149341    12 年前

    这个 readline 图书馆仅供互动使用。您的程序可能应该重新使用 fgets() 如果 isatty(STDIN_FILENO) 是错误的。

        2
  •  2
  •   Low power    5 年前

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

    从读出线 documentation :

    变量:FILE* rl_outstream(_O)

    Readline对其执行输出的stdio流。

    刚刚设置 rl_outstream stderr 在程序开始时,因此它将返回到stderr;例如:

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

    事实上 猛击(1) 也这样做。

    我也同意,如果您的程序不是设计为交互式使用的,那么您应该使用另一种更简单的方式从stdin获取行,例如 获取线路(3) , fgets(3) 获取字符(3) .