• ベストアンサー

閉じてないファイルについて

Visual C++ 2010 Expressで、開いたら閉じなければいけないファイルやハンドルを閉じないでプログラムを終了した場合に、閉じていないファイル名やハンドル名を確認するにはどうすればいいですか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>ほとんどの入門書ではプログラム終了直前に必ず開いたハンドルを閉じるように書かれているのですが・・・。 後始末を習慣づけるためだと思います。 ただ、「終了直前に閉じる」と書いてるとしたら、良くない本です。「使い終わったら閉じる」というのが正しい考え方です。 1つのプロセスから同時にオープンするファイル数には上限があるので、何十ものファイルを順次読んでいくプログラムの場合、読み終わった段階で閉じないと、そのうち上限に達して開けなくなります。 習慣づけ以外としては、読む人に、「これ以降はこのファイルを使わない」という情報を与えるためです。「変数のスコープはできるだけ狭くすべき」というのと同じですね。 また、プロセス外の共有資源(セマフォなど)をカーネルに依頼して確保したようなケースだと、これはプロセスが終了しても(プロセスの外なので)自動的に解放されないので、明示的に解放が必要なはずです。

nazoda
質問者

お礼

分かりやすい回答ありがとうございました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

プログラムを終了してしまうと、全部クローズされるので調査不能です。 終了で無く、1時間スリープとかするようにして、その間に、オープンされているファイルを調べるくらい。 調べる方法としては、openfilesコマンド、process monitorプログラム など。

nazoda
質問者

補足

回答ありがとうございます。 プログラムを終了すると全部クローズされてしまうならば、なぜわざわざハンドルを閉じなければならないのでしょうか? ほとんどの入門書ではプログラム終了直前に必ず開いたハンドルを閉じるように書かれているのですが・・・。

関連するQ&A