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

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

clearerr

void clearerr(FILE *stream)

Прототип: 
Описание: 

Функция clearerr() используется для сброса в 0 флага файловой ошибки, на который указывает stream. Указатель конца файла также сбрасывается.

Флаги ошибки для каждого потока при успешном вызове функции fopen() изначально устанав­ливаются в 0. После возникновения ошибки флаги остаются установленными до явного вызова функции clearerr() или rewind().

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

Пример: 
Следующая программа копирует один файл в другой. Если встречается ошибка, выводится сооб­щение и флаг ошибки сбрасывается.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])  /* копирование одного файла в другой */
{
FILE *in, *out;
char ch;
if(argc!=3) {
printf("You forgot to enter a filename\n");
exit (0);
}
if((in=fopen(argv[1], "rb")) == NULL) {
printf("Cannot open file.\n");
exit (0);
}
if((out=fopen(argv[2],"wb")) == NULL) {
printf("Cannot open file.\n");
exit (0);
}
while(!feof(in)) {
ch = getc (in);
if (ferror(in))
{
printf("Read Error");
clearerr(in);
}
else {
if(!feof (in)) putc(ch, out);
if(ferror(out)) {
printf ("Write Error");
clearerr(out);
}
}
}
fclose (in);
fclose (out);
return 0;
}