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

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

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

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

10

Решение

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

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

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

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

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

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

13

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]