Ну, EOF
- это просто значение, возвращаемое функцией, определенной в заголовочном файле C stdio.h
.Он фактически возвращается ко всем функциям чтения ОС, поэтому его системная зависимость.Когда ОС достигает конца файла, она отправляет его в функцию, которая в своем возвращаемом значении больше, чем обычно (-1
), но не всегда.Итак, подведем итог: EOF
это не символ, а константа, возвращаемая ОС.РЕДАКТИРОВАТЬ: Ну, вам нужно больше узнать о файловой системе, посмотрите на это.
Привет, на ваш второй вопрос:
еще раз, вы должны лучше посмотреть в filesystems
.FAT - очень хороший пример, потому что вы можете найти много статей об этом, и его принципы очень похожи на NTFS.Во всяком случае, еще раз, EOF NOT a character
.Вы не можете поместить его в файл напрямую.Если бы вы могли сделать это, представьте себе последствия, даже «тупой» файл изображения не может быть прочитан системой.
Почему?Поскольку ОС работает как очень сложная структура слоев.Одним из уровней является драйвер файловой системы.Он обеспечивает передачу данных из каждой файловой системы, известной драйверу.Он обеспечивает связь между приложениями и действующей системой хранения файлов на жестком диске.
Если быть точным, файловая система FAT использует так называемую таблицу FAT - это таблица, расположенная рядом с началом жесткого диска (или раздела).адресное пространство, и оно содержит карту всех кластеров (маленькие ячейки памяти).Итак, теперь, когда вы хотите сохранить какой-либо файл на жесткий диск, ОС (драйвер файловой системы) просматривает таблицу FAT и ищет значение «0x0».Это значение «0x0» сообщает ОС, что кластер, адрес которого описывается расположением этого значения в таблице FAT, может свободно записывать.
Итак, он записывает в него первую часть файла.Затем он ищет другое значение «0x0» в FAT и, если он найден, записывает вторую часть файла в кластер, на который он указывает.Затем он изменяет значение первой записи таблицы FAT, в которой находится файл, на физический адрес следующей, в нашем случае, второй части файла.
Когда ваш файл хранится на жестком диске, теперь появляется последняя часть, он записывает желаемое значение EOF, но в таблицу FAT, а не в «часть данных» жесткого диска.Поэтому, когда файл читается в следующий раз, он знает, что это конец, не смотрите дальше.
Итак, теперь вы видите, хотите ли вы вручную записать значение EOF в место, где он находится?Для этого вам нужно написать свой собственный драйвер, который сможет переписать запись FAT, но это практически невозможно сделать для начинающих.