C言語 ファイルのエラー判定 終端判定 エラーのクリア - stdio.h - [ ferror, feof, clearerr ]

2008.09.30 Tuesday | by LRESULT


ァイルのエラー判定には、ferror()を使い、

エラーのクリアには、clearerr()を使用します。
また、ファイルの終端(EOF)判定には、feof()という関数が用意されています。


ferror
書式 int ferror( FILE *fp )
機能 ファイルのエラー状態を判定する
引数 FILE *fp : ファイル(ストリーム)ポインタ
戻り値 エラーの場合は、0以外を返し、
正常な場合は、0を返します。




feof
書式 int feofFILE *fp )
機能 ファイルの終端(EOF)判定を行う
引数 FILE *fp : ファイル(ストリーム)ポインタ
戻り値 終端の場合は、0以外を返し、
終端で無い場合は、0を返します。




clearerr
書式 void clearerrFILE *fp )
機能 エラー状態をクリアする
引数 FILE *fp : ファイル(ストリーム)ポインタ
戻り値 なし


ferror()やfeof()が用意されているかというと、
  fgetc()やfscanf()等ではエラーが起こった場合と、ファイル終端まで読み込んだ場合とで
  同じEOF(-1)を戻り値として返してしまい区別が付かないため、
  別々の関数として用意してあるわけです。





サンプルコード
まず「test.txt」というファイルを読み込みモード "r" で開き、
fputs()でファイルの書き込みをしようとします。すると、エラーが発生するはずなので確認します。
更に、clearerr()でエラーをクリアし、エラーが無いか確認します。
#include <stdio.h>

int main(void)
{
  FILE *fp;
  char *fname = "test.txt";

  fp = fopen( fname, "r" );
  if( fp == NULL ){
    printf( "%sファイルが開けません¥n", fname );
    return -1;
  }

  fputs( "test", fp );  /* わざとエラーを発生させる */

  if( ferror( fp ) != 0 ){
    printf( "エラーが発生しました¥n" );
  }

  clearerr( fp );

  if( ferror( fp ) == 0 ){
    printf( "エラーはクリアされました¥n" );
  }

  fclose( fp );
  return 0;
}



結果
エラーが発生しました
エラーはクリアされました
と、表示されます。

読み込みモードで開いたファイルに、書き込むとエラーが発生します。
そのままだと、エラーが発生したままなので、clearerr()でエラーを消去します。


参考
C言語 エラー番号の取得 エラー内容の取得 - errno.h - [ errno, strerror ]
ファイルのエラー処理では、↑こちらも実用的だと思います。

カテゴリ:C言語 stdio.h | 22:37 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/59

トラックバック