2010-10-25 3 views
1

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

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

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

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

+1

Вот как работают средства командной строки. Если вы хотите, чтобы весь вывод находился в одном месте, попробуйте перенаправить вывод в файл. – casablanca

ответ

1

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

0

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

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