#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; }