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