Функции позиционирования файла внутренне сбрасывают вывод на устройство и очищают кэш ввода? - PullRequest
0 голосов
/ 31 августа 2018

С https://stackoverflow.com/a/52068965/156458

При переключении между чтением и записью этот буфер должен быть очищен перед переключением режимов, в противном случае возможна потеря данных. Каждая из операций , упомянутых выше, выполняет требуемую очистку буфера.

«Операции» включают fseek, fsetpos и rewind.

Функции позиционирования файла внутренне сбрасывают вывод на устройство и очищают кэш ввода? 7.21.5.3p7 в стандарте C этого не говорит. Я также не нахожу это в руководствах функций позиционирования файла.

Если нет, то почему функции позиционирования файла (если не fflush) должны вызываться между выводом и вводом?

Спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

Описание режима обновления (+) для открытия файла содержит эту деталь:

Когда файл открывается в режиме обновления («+» в качестве второго или третьего символа в Приведенный выше список mode значений аргументов), ввод и вывод могут выполняться на связанный поток. Однако за выводом не следует непосредственно вводить без промежуточный вызов функции fflush или функции позиционирования файла (fseek, fsetpos или rewind), и за входом не должно следовать непосредственно выход без промежуточный вызов функции позиционирования файла, если только операция ввода не встречает endof-file.

Так что, хотя в описании этих функций явно не упоминается, что они очищают буфер, это условие подразумевает это. Но требуется только при использовании режима обновления.

...