C spec имеет интересную сноску (# 268 C11dr §7.21.3 9)
"Установка индикатора положения файла в конец файла, как и в случае с
fseek(file, 0, SEEK_END)
, имеет поведение undefined для двоичного потока (из-за возможных завершающих нулевых символов) или для любого потока с зависящей от состояния кодировкой, которая делает не обязательно заканчиваются в начальном состоянии сдвига".
Используется ли это когда-либо к двоичным потокам, читающим файл? (как с физического устройства)
IMO, двоичный файл на диске - это просто море байтов. Мне кажется, что двоичный файл не может иметь зависящую от состояния кодировку, поскольку это двоичный файл. Я неясен по понятию "двоичные широко ориентированные потоки", и если это даже может применяться к дисковым вводам/выводам.
Я вижу, что вызов fseek(file, 0, SEEK_END)
в последовательном потоке, таком как COM-порт или, может быть, stdin
, может не доходить до истинного конца, поскольку конец еще не определен. Таким образом, сужение вопроса на физические файлы.
[править] Ответ: Проблема со старыми (возможно, до конца 1980-х годов). В настоящее время в 2014 году Windows, POSIT-специфические и не экзотические другие: не проблема.
@Shafik Yaghmour дает хорошую ссылку в Использование fseek и ftell для определения размера файла имеет уязвимость?. Там @Jerry Coffin обсуждает CP/M, поскольку двоичные файлы не всегда имеют точную длину. (128-байтовые записи на wiki).
Спасибо @Keith Thompson ответить за мясо ответа.
Вместе это объясняет спецификации "(из-за возможных завершающих нулевых символов)".