8

私のプログラムでは、すでに閉じているファイルを閉じることがあります。fclose既に閉じているファイルに対してを実行するとどうなりますか?

それができない場合、ファイルが閉じているか開いているかを知る方法はありますか?

4

1 に答える 1

19

同じストリームで 2 回呼び出すfcloseことは、未定義の動作です。おそらくクラッシュします。FILE*が既に閉じられているかどうかを確認する方法はないため、安全な解決策は、閉じられたらすぐにポインターを NULL に設定することです。

fclose(fh);
fh = NULL;

出典: 「FILE オブジェクトへのポインタの値は、関連付けられたファイルが閉じられた後は不確定です」(C ドラフト標準)。「fclose() の呼び出し後、ストリームを使用すると、未定義の動作が発生します。」(Single UNIX ® 仕様)。

于 2014-07-03T14:11:08.287 に答える