我正在使用gcc -lreadline的readline来读取stdin。后来,我想从一个文件读取,所以我尝试了以下,但它仍然暂停并接受来自命令提示符的输入,而不是从文件中接受它。这种方法有解决方法吗?
FILE* savedStdin = stdin;
stdin = fopen("someFile.txt", "r");
char* input = readline(NULL);
stdin = savedStdin;
答案 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