使用C Readline从文件而不是stdin读取一行

时间:2011-04-23 23:45:45

标签: c file stdin readline

我正在使用gcc -lreadline的readline来读取stdin。后来,我想从一个文件读取,所以我尝试了以下,但它仍然暂停并接受来自命令提示符的输入,而不是从文件中接受它。这种方法有解决方法吗?


FILE* savedStdin = stdin;
stdin = fopen("someFile.txt", "r");
char* input = readline(NULL);
stdin = savedStdin;

2 个答案:

答案 0 :(得分:2)

readline库实际上非常灵活,几乎可以肯定会折磨它来做你想要的。但是,当你声明尝试使用readline从文件中读取的原因(在其他地方使用readline从控制台读取的程序中)是你不想要的时候似乎没有任何意义自己管理输入缓冲区。只需使用readline读取控制台输入(如命令提示符),当需要从文件中读取时,按照通常不使用readline的方式进行操作,例如使用fgets()

如果您真的不喜欢这一切,那么有一个名为rl_instream的全局变量,您可以修改该变量以从除stdin之外的流中读取readline。它的类型是FILE*,它在此处记录: https://tiswww.case.edu/php/chet/readline/readline.html

答案 1 :(得分:1)

也许只是尝试使用stdin,然后使用:

运行它
cat file.txt > program