Не каждая программа выигрывает от использования буферизованного ввода-вывода.
В вашем случае, я думаю, я бы просто использовал read(2)
1 . Таким образом, вы:
- устранение всех устаревших буферов 2 проблем
- вероятно, работать быстрее благодаря устранению двойной буферизации
- вероятно, использовать меньше памяти
- определенно упростит реализацию
В случае, подобном описанному вами, прирост эффективности может не иметь значения для современных удивительно мощных процессоров. Но я укажу, что такие программы, как cp(2)
и другие высокопроизводительные движки данных, не используют буферизованные пакеты ввода / вывода.
1. То есть open(2)
, read(2)
, lseek(2)
и close(2)
.
2. И, возможно, чтобы перехватить аргумент, по вопросам, связанным с этим, кто-то обычно предлагает «полезное» предложение по линии fflush(stdin)
, а затем приходит другой, чтобы точно указать, что fflush()
определяется C99 на только выходные потоки, и что обычно неразумно зависеть от поведения конкретной реализации.