Это если хочется иметь проблемы с буферизацией. А я, например, иной раз отрубаю нафиг буферизацию stdout! Хочется мне так! Не люблю я, когда надо ждать до \n
man fopencookie например. если рассматривать FILE и к° как абстрактный класс то можно запилить реализацию іо прямо в юзерспейсе. в случае с дескрипторами нужно было бы городить модуль ядра с чардев например.
А теперь скажи, чем этот дурацкий FILE лучше стандартного решения в виде mmap?
Если ты работаешь с входным текстовым файлом, то логичней его mmap'нуть и работать уже так, как будто бы ты весь файл в буфер считал, нежели сношать мозг с дурацкими fgets'ами!
Строго говоря, зачастую буфер быстрее работает (когда данные маленькими порциями поступают), т.к. дерганье головки на диске из-за каждого байта - не самая хорошая идея (оперативка в сотни раз быстрее работает). Главное не забывай буфер сбрасывать на диск в конце работы с файлом, иначе можно данных не досчитаться. А иногда да, буферизованные операции не нужны, но это скорее редкость.
А всякие mmap-ы, которые «лениво» читают файл это только POSIX, а код не только для Linux-а, BSD и MacOSX пишется, как не удивительно.
Используя FILE можно написать такие несколько няшные и портабельные штуки, как libtiff (тебе, как учоному, должно быть это весьма интересно) или libtasn1 например.
Кстати вопрос. А ты можешь своим коі8-р напечатать букву ї?
ЕМНИП, в КОИ-8 нет даже русских типографских кавычек-«ёлочек», символа параграфа и koi-чего ещё. Во многих КОИ-шрифтах даже буквы Ё нет, хотя место в кодовой таблице для неё вроде бы предусмотрено...
Вай, что ты говоришь! Сколько лет работал с сокетами, трубами и tty при помощи обычных read/write, а ты мне прямо-таки глаза открыл, какой я был идиот, что не ездил на велосипеде с квадратными колесами!
Там нет не только «ёлочек». Нет буквы «ё», буквы расставлены не по алфавиту (доп проблемы если нужна сортировка), нет букв нац. алфавитов и т.д. Я согласен, что однобайтовая кодировка имеет свои преимущества, но КОИ-8, ИМХО, нужна только если требуется совместимость
В одноканальном режиме DDR3-2400 имеет скорость передачи данных 19200 МБ/с. Время цикла ~ 3,33 нс (время полного доступа тоже где-то такое, поскольку уже у DDR2 время цикла было 5нс и время полного доступа от 25 до 7,5 нс). Ну и сравни это с 8 мс у диска (8 мс=8 000 нс) даже не в 100 раз выходит, а в 2400 раз. Теперь скоростью записи (пусть головка медленно позиционируется, пишется может быстрее?). Нет, скорость записи на типичный (очень хороший) в идеальных условиях HDD примерно 130 Мб/с. 19200/130*8=147*8=1181. Откуда взялась 8? МБ - мегабайты, Мб - мебибайты. И того да, был неправ, надо было писать в тысячи.
fopen does line ending translation if the file is not opened in binary mode, which can be very helpful if your program is ever ported to a non-Unix environment.
Аналогично.
A FILE * gives you the ability to use fscanf and other stdio functions.
Эти функции просто принимали бы fd.
Your code may someday need to be ported to some other platform that only supports ANSI C and does not support the open function.
Если бы в стандарте были бы open/write etc., то, наоборот, зоопарка было бы меньше. Может быть даже в win32 не изобретали свои OpenFile и т.п.
Мне всё больше кажется, что нифига он не учёный, а подсобный рабочий. Залить жидкий азот в инфракрасный детектор, отъюстировать какой-нибудь телескопчик, принести тот тяжелый противовес, подпаять провод итд итп.