fclose() — ストリームのクローズ

フォーマット

#include <stdio.h>
int fclose(FILE *stream);

言語レベル

ANSI

スレッド・セーフ

はい

説明

fclose() 関数は stream で示されるストリームをクローズします。この関数は、ストリームをクローズする前に、そのストリームと関連付けられたすべてのバッファーを削除します。 ストリームをクローズする場合、この関数はシステムが予約したすべてのバッファーを開放します。 バイナリー・ストリームがクローズされる場合は、ファイル内の最後のレコードがそのレコードの終わりまでヌル文字 (\0) で埋められます。

戻り値

ストリームが正常にクローズされた場合は、fclose() 関数は 0 を戻し、エラーが検出された場合は EOF を戻します。

errno の値は、次のいずれかに設定されます。
意味
ENOTOPEN
ファイルはオープンされていません。
EIOERROR
リカバリー不能な入出力エラーが発生しました。
EIORECERR
リカバリー可能な入出力エラーが発生しました。
ESCANFAILURE
ファイルは走査失敗のマークを付けられました。
注: FILE ポインターが指すストレージは、fclose() 関数によって解放されます。fclose() 関数を使用した後は、FILE ポインターを使用するすべての試行が無効です。

次の例は、ファイル myfile をオープンしてストリームとして読み込み、その後にこのファイルをクローズします。
#include <stdio.h>
 
#define NUM_ALPHA  26
 
int main(void)
{
  FILE *stream;
  char buffer[NUM_ALPHA];
 
  if (( stream = fopen("mylib/myfile", "r"))!= NULL )
  {
    fread( buffer, sizeof( char ), NUM_ALPHA, stream );
    printf( "buffer = %s¥n", buffer );
  }
 
  if (fclose(stream))   /* Close the stream. */
      perror("fclose error");
  else printf("File mylib/myfile closed successfully.¥n");
}