Содержание | Глава 13

Функция clearerr

#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()
Содержание | Глава 13