HIR-NET Home C言語 運営者 オンラインソフト 運営者著書 CG HIR-NETリンク集

fcloseエフ・クローズ関数かんすう
fclose function

語源  fileファイオ closeクローズ(ファイル閉鎖)
分類  C/C++標準ライブラリ/関数/入出力関数/ファイルアクセス関数
名称  ファイルクローズ関数(file close function)
対義  fopen関数
関連  EOFマクロ, fflush関数
解説  fclose関数は、ファイルをクローズさせる関数です。ストリーム*stream についてフラッシュを行い、ファイルをクローズ(close)し、ストリームをファイルから切り離します。このとき、ストリームに対し書き出されていないバッファ内のデータはファイルに書き出すためにホスト環境に引き渡されます。読み込まれていないバッファ内のデータは捨てられます。自動的に割り付けられていたバッファは解放されます。

関数原型宣言ヘッダ  <stdio.h>
関数原型宣言例
                 ストリーム
                   ↓
int fclose(FILE *stream);
↓
0  :成功
EOF:失敗
関数返却値
①ファイルが正しくクローズされた場合は 0 を返します。
②エラーが検出された場合は EOF を返します。

注意1  出力ストリームに 1文字も出力しなかったファイルをクローズすると、長さ0 のファイルとなりますが、それが実際に存在するかどうかは処理系に依存します。

注意2  返却値の確認が必要なのは出力ストリームについてです。なぜなら、出力先のディスクの残量が怪しげな場合は出力されたデータの一部が失われた可能性があるからです。

落とし穴1  fclose(NULL) の動作は未定義です。
落とし穴2  FILE *s; において fclose(s)呼出の後の s は無意味になります。このクローズ済みの s を再度 fclose(s) した場合の動作は未定義です。場合によってはファイルシステムをおかしくすます。例えば別のファイルをクローズしてしまうこともあります。



 プログラム例   

ファイルのクローズの仕方
// fclose1.c

#include <stdio.h> // FILE,NULL,fopen,fclose
#include <stdlib.h> // EXIT_FAILURE,EXIT_SUCCESS,exit,abort


int main(void)
{
  FILE *sget; // 入力ストリーム Stream GET
  sget=fopen("ファイル名","r");
  if(sget==NULL)
  { // オープンチェック
    printf("fopen失敗\n");
    exit(EXIT_FAILURE);
  }

  //…

  if(fclose(sget))
  { // クローズ
    printf("fclose失敗\n");
    abort();
  }

  return EXIT_SUCCESS;
} // main
実行結果  「ファイル名」が存在すれば、そのファイルをオープンしクローズ(ただし、クローズが失敗したら「fclose失敗⏎」を出力し異常終了します)。存在しなれば「fopen失敗⏎」を出力します。





◆リンクは、ご自由にお張りください。

Copyright © 1988-2017 Hirabayashi Masahide  プライバシーポリシー