Объявления прототипов функций обработки ошибок находятся в файле заголовков stdio.h, поэтому программы, использующие эти функции, должны включать следующую директиву препроцессора:
#include <stdio.h>
Каждая структура FILE содержит информацию о том, был ли достигнут конец соответствующего файла и о том, произошла ли ошибка ввода-вывода (например, попытка писать в файл, который был открыт только для чтения).
Функция feof() - стандартная функция ввода-вывода, которая проверяет достижение конца файла.
Объявление прототипа функции feof():
int feof(FILE *stream)
Функция feof() возвращает отличное от нуля значение, если в процессе чтения или записи был достигнут конец файла, иначе она возвращает 0.
Пример 1
while (1)
   {
   n=fread(buf, 1, BUFSIZ, rp);
   fwrite(buf, 1, n, wp);
   if (feof(rp))
     break;
   }
Попытка записи в файл может быть безуспешной, если размер файла достиг максимума или исчерпалось свободное дисковое пространство.
Функция ferror() - стандартная функция ввода-вывода, которая выполняет проверку полей структуры FILE.
Функция clearerr() - стандартная функция ввода-вывода, которая выполняет очистку полей структуры FILE.
Объявления прототипов функциий ferror() и clearerr():
int ferror(FILE *stream)
void clearerr(FILE *stream)
Функция ferror() возвращает отличное от нуля значение, если перед этим произошла ошибка ввода-вывода, иначе - 0.
Функция clearerr() сбрасывает признаки ошибки и конца файла в 0.
Пример 2
/*пытается MAX раз выполнить чтение с устройства*/
success = 0;
clearerr(rp);
for(i=1; i<MAX; i++)
   {
   fread(buf, BUFSIZ, 1, rp);
   if(!ferror(rp))
     {
     success = 1;
     break;
     }
   clearerr(rp);
   }
if (success)
   printf("Чтение выполнено\n");
else
   printf("После максимального числа попыток чтение не выполнено\n");