Программирование на C и C++

Онлайн справочник программиста на C и C++

Использование feof()

Как утверждалось ранее, файловая система С может оперировать двоичными данными. Когда файл открыт для двоичного ввода, может быть прочитано целочисленное значение, равное EOF. В результате getc() будет отображать состояние наличия конца файла, хотя физический конец еще не достигнут. Для разрешения данной проблемы в С имеется функция feof(), используемая для определения конца файла при чтении двоичных данных. Она имеет следующий прототип:

int feof(FILE *fp);

где fp идентифицирует файл. Функция feof() возвращает не 0, если достигнут конец файла, в противном случае она возвращает 0. Следовательно, следующий код читает двоичный файл, пока не встретится метка конца файла:

while(!feof(fp)) ch = getc(fp);

Данный метод может применяться не только к двоичным, но и к текстовым файлам.

Следующая программа копирует файл любого типа. Следует обратить внимание, что файлы открываются в двоичном режиме, и feof() используется для проверки наличия конца файла:

/* данная программа копирует один файл в другой */
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *in, out;
char ch;
if (argc!=3) {
printf("You forgot to enter a filename.");
return 1;
}
if( (in=fopen(argv[1] , "rb")) == NULL)}
printf ("Cannot open source file.");
return 1;
}
if((out=fopen(argv[ 2 ] , "wb")) == NULL) {
printf ("Cannot open destination file.");
return 1;
}

/* копирование файла */
while (!feof (in)) {
сh = getc(in);
if ( !feof(in)) putc(ch, out);
}
fclose(in);
fclose(out);
return 0;
}