Я до сих пор справлялся с тем, что EOF
- специальный символ, автоматически вставленный в конце текстового файла, чтобы указать его конец. Но теперь я чувствую необходимость в некоторых разъяснениях по этому поводу. Я проверил на Google и на странице Википедии EOF
, но они не смогли ответить на следующее, и для этого нет точных ссылок. Поэтому, пожалуйста, помогите мне в этом:
-
В моей книге говорится, что файлы двоичного режима отслеживают конец файла из числа символов, присутствующих в записи каталога файла. (В отличие от текстовых файлов, которые имеют специальный символ EOF для обозначения конца). Итак, какова история
EOF
в контексте двоичных файлов? Я запутался, потому что в следующей программе я успешно использую сравнение!=EOF
при чтении из файла.exe
в двоичном режиме:#include<stdio.h> #include<stdlib.h> int main() { int ch; FILE *fp1,*fp2; fp1=fopen("source.exe","rb"); fp2=fopen("dest.exe","wb"); if(fp1==NULL||fp2==NULL) { printf("Error opening files"); exit(-1); } while((ch=getc(fp1))!=EOF) putc(ch,fp2); fclose(fp1); fclose(fp2); }
-
Является ли
EOF
особым "символом" вообще? Или это условие , как говорит Википедия, условие, когда компьютер знает, когда возвращать определенное значение, например-1
(EOF
на моем компьютере)? Пример такого "условия", когда функция считывания символов заканчивает чтение всех присутствующих символов или когда функции ввода/вывода символов/строк сталкиваются с ошибкой при чтении/записи?Интересно, что тег для
EOF
смешивал оба определенияEOF
. Тег дляEOF
сказал: "В области программирования EOF представляет собой последовательность байтов (или chacracter), которая указывает, что после этого больше нет содержимого". В то же время в разделе "about" также сказано, что "Конец файл (обычно сокращенный EOF) является условием в операционной системе компьютера, где больше данных не может быть прочитано из источника данных. Источник данных обычно называют файлом или потоком.
Но у меня сильное чувство, что EOF
не будет символом, поскольку каждая другая функция, кажется, возвращает его, когда он сталкивается с ошибкой во время ввода-вывода.
Будет очень мило с вашей стороны, если вы сможете очистить этот вопрос для меня.