C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

入出力のEOFとエラー状態をクリアする

2012.08.10

clearerr関数は、ファイルポインタで示されるストリームのEOF(end of file)とエラーの状態をクリアします。

#include <stdio.h>
void clearerr(FILE *stream);

*streamはfopen関数で取得した、ファイルポインタを指定します。

次の例題プログラムはファイルの最後(EOF)まで入力した後、再度、ファイルの先頭から入力しています。ここでは、エラー状態をクリアする目的でclearerr関数を使っています。

プログラム 例

#include <stdio.h>

int main(void)
{
  FILE    *fp;
  int     in_data;

  if ((fp = fopen('temp.txt', 'r')) != NULL) {
    printf('1回目の表示\n');
    while((in_data = fgetc(fp)) != EOF) {
      putchar(in_data);
    }

    clearerr(fp);
    /* ファイル位置表示子をファイルの先頭に戻す */
    rewind(fp);

    printf('\n2回目の表示\n');
    while((in_data = fgetc(fp)) != EOF) {
      putchar(in_data);
    }

    fclose(fp);
  }
  else {
    printf('ファイルのオープンに失敗しました\n');
  }

  return 0;
}

例の実行結果

$ cat temp.txt
Hello World!!.
$
$ ./clearerr.exe
1回目の表示
Hello World!!.

2回目の表示
Hello World!!.
$

関連記事