Прочтите Plauger " Стандартная библиотека C ", чтобы узнать, почему различные функции стандартной библиотеки (C89) таковы, какие есть, и, в частности, почему части стандартной библиотеки ввода-вывода они есть. Одна из причин заключается в том, что C работает в самых разных системах и с разными средами; устройства, такие как ленты, вполне могут нуждаться в обработке, отличной от той, с которой вы привыкли думать. Кроме того, в Unix рассмотрим ваше «tty» устройство - оно соединяет клавиатуру и мышь с экраном - три совершенно разных аппаратных элемента. Координация между ними достаточно сложна; правила в стандарте упрощают.
Обратите внимание, что стандарт обязывает это. Это из стандарта C11, ISO / IEC 9899: 2011, но формулировка была похожа в предыдущих выпусках:
§7.21.5.3 Функция fopen
¶7 Когда файл открывается в режиме обновления («+» в качестве второго или третьего символа в
Приведенный выше список значений аргументов режима), ввод и вывод могут выполняться на
связанный поток. Однако за выводом не следует непосредственно вводить без
промежуточный вызов функции fflush
или функции позиционирования файла (fseek
,
fsetpos
, или rewind
), и за входом не должно следовать непосредственно выход без
промежуточный вызов функции позиционирования файла, если только операция ввода не встречает конец файла. Открытие (или создание) текстового файла в режиме обновления может вместо этого открыть (или создать)
бинарный поток в некоторых реализациях.