Как буферизовать стандартный вывод до закрытия стандартного ввода? - PullRequest
1 голос
/ 26 октября 2010

Я знакомлюсь с программированием на C и хочу написать программу, похожую на expand . Инструмент командной строки сначала читает каждый ввод из stdin, обрабатывает его и записывает полный результат в stdout. Как я могу добиться этого элегантным способом?

В настоящее время мой код выглядит примерно так. Это прекрасно работает при обработке файлов, но, очевидно, когда input равно stdin после каждой новой строки, введенной пользователем, он немедленно получает результат для введенной строки.

char buffer[1024];
while (fgets(&buffer[0], sizeof(buffer) / sizeof(char), input) != NULL)
{
    /* do something */
    printf("output");
}

С наилучшими пожеланиями,
Оливер Ханаппи

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Запишите все ваши выходные данные во временный файл вместо stdout, затем скопируйте из этого временного файла в stdout в конце выполнения вашей программы.

0 голосов
/ 26 октября 2010

Ну, с чего вы взяли, что stdin когда-нибудь закроется? :)

Вы можете использовать isatty(STDIN_FILENO), чтобы определить, подключен ли stdin к пользовательскому вводу. (Если это так, функция возвращает ненулевое значение.) Если это так, вы можете соответствующим образом изменить свое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...