#include <stdio.h>
void clearerr(FILE *stream);
Функция clearerr() сбрасывает (т.е. устанавливает равным нулю) признак ошибки, связанный с потоком, на который указывает элемент stream. При этом также сбрасывается признак конца файла.
При успешном обращении к функции fopen() признаки ошибок для каждого потока первоначально устанавливаются равными нулю. При работе с файлами ошибки могут возникать по различным причинам, многие из которых зависят от конкретной системы. Истинную природу ошибки можно определить в результате вызова функции perror(), которая выводит сообщение, описывающее ошибку (см. описание функции perror()).
Пример
Приведенная ниже программа копирует один файл в другой. При возникновении ошибки выводится сообщение, поясняющее ее природу.
/* Копирование одного файла в другой. */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *in, *out;
char ch;
if(argc!=3) {
printf("He введено имя файла.\n");
exit(1);
}
if((in=fopen(argv[1], "rb")) == NULL) {
printf("Невозможно открыть входной файл.\n");
exit(1);
}
if((out=fopen(argv[2], "wb")) == NULL) {
printf("Heвoзмoжнo открыть выходной файл.\n");
exit(1);
}
while(!feof(in)) {
ch = getc(in);
if(ferror(in)) {
printf("Ошибка чтения");
clearerr(in);
break;
} else {
if(!feof(in)) putc(ch, out);
if(ferror(out)) {
printf("Ошибка записи");
clearerr(out);
break;
}
}
}
fclose(in);
fclose(out);
return 0;
}
Зависимые функции
feof() ferror() perror()