Когда ФАЙЛ сбрасывается?

У меня есть старый добрый дескриптор файла C FILE под Windows, который используется выходным потоком для записи данных. Мой вопрос прост, и все же я не мог найти ответ:

Когда содержимое записывается на диск, если я не вызываю fflush?

Поток постоянно получает данные, и кажется, что содержимое часто сбрасывается, но каково правило его очистки?

1 ответ

Решение

Если реализация библиотеки может определить, что выходной поток не относится к интерактивному устройству (и только тогда), поток будет полностью буферизован, т.е. он будет очищен, когда буфер (по умолчанию BUFSIZ размер) полный.

Если буфер не полностью, поток может быть буферизован строкой, то есть он будет очищен, когда '\n' записывается (или буфер заполнен, если ваша строка действительно длинная) или небуферизован.

(ИСО / МЭК 9899:1999, глава 7.19.5.3 " fopen() функция ", параграф 7. У вас под рукой нет более новой версии стандарта, но AFAIK это не изменило.)

То, что составляет "интерактивное устройство", определяется реализацией. (Глава 5.1.2.3 "Выполнение программы", пункт 6.)

Общая идея заключается в том, что вывод файла должен быть полностью буферизован, тогда как вывод терминала должен быть буферизован строкой (или небуферизован, как правильно указал Джесси Гуд).

Как политику буферизации, так и размер буфера можно изменить с помощью setvbuf(), Обратите внимание, что любое такое изменение должно произойти до того, как вы начнете получать доступ к потоку, что несколько очевидно, если подумать об этом.

Другие вопросы по тегам