Использование C Readline для чтения строки из файла вместо стандартного ввода - PullRequest
1 голос
/ 24 апреля 2011

Я использую readline из gcc -lreadline для чтения из stdin.Позже я хочу прочитать из файла, поэтому я попробовал следующее, но оно все равно приостановилось и приняло ввод из командной строки вместо того, чтобы принять его из файла.Есть ли исправление для этого подхода?

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

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Библиотека readline на самом деле довольно гибкая и почти наверняка может быть замучена, чтобы делать то, что вы хотите.Но, похоже, нет смысла беспокоиться об этом, когда ваша заявленная причина попытки использовать readline для чтения из файла (в программе, где в другом месте используется readline для чтения из консоли), вы не хотитеуправлять своими входными буферами самостоятельно.Просто используйте readline для чтения ввода с консоли (например, командной строки), и когда вам нужно прочитать из файла, сделайте это так, как вы обычно делаете без readline, например, используя fgets().

Если вына самом деле все это не нравится, есть глобальная переменная с именем rl_instream, которую вы можете изменить, чтобы сделать readline прочитанным из потока, отличного от stdin.Его тип FILE* и задокументирован здесь: https://tiswww.case.edu/php/chet/readline/readline.html

1 голос
/ 24 апреля 2011

возможно, просто попробуйте использовать стандартный ввод и запустить его с помощью:

cat file.txt > program
...