私のプログラムでは、すでに閉じているファイルを閉じることがあります。fclose
既に閉じているファイルに対してを実行するとどうなりますか?
それができない場合、ファイルが閉じているか開いているかを知る方法はありますか?
同じストリームで 2 回呼び出すfclose
ことは、未定義の動作です。おそらくクラッシュします。FILE*
が既に閉じられているかどうかを確認する方法はないため、安全な解決策は、閉じられたらすぐにポインターを NULL に設定することです。
fclose(fh);
fh = NULL;
出典: 「FILE オブジェクトへのポインタの値は、関連付けられたファイルが閉じられた後は不確定です」(C ドラフト標準)。「fclose() の呼び出し後、ストリームを使用すると、未定義の動作が発生します。」(Single UNIX ® 仕様)。