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

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

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

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

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

也许只是尝试使用stdin,并使用以下命令运行:

 cat file.txt > program