我编写了一个小型C程序,它使用readline("")
来读取stdin的输入。我没有从终端与它进行交互,而是编写了一个执行C程序并给它输入的测试工具:
test harness --stdout--> | --stdin--> C program
^------stdin--- | <--stdout-----/
此测试工具正在接收其输出的回显,即使程序本身也是如此。为什么readline()回显其输入,我可以禁用它吗?或者我不应该在非交互式环境中使用readline()吗?
答案 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)。