2009-08-22 13 views
10

プロセス内のすべての開いているファイルを見つけるにはどうすればいいですか?プロセス内のすべての開いているファイルを閉じる

これはfork()exec()の前)の後に知っておくと便利です。

私はgetdtablesize()、よりポータブルsysconf(_SC_OPEN_MAX)のexistanceを知っているが、開いているファイルその背後にあるかどうかがあるのか​​どうか、すべての有効ファイルディスクリプタをクローズしようとするために非効率です。 (私は早すぎる最適化の危険性も承知していますが、これは私が推測するような美学についてです:-)

答えて

3

すべてのファイル記述子を閉じるのは効率的ではないかもしれませんが、システムが何か良いものであれば、ファイル記述子を検索するシステムコールの実装はかなり効率的でなければなりません。

開いているファイルディスクリプタのみを検索する場合は、存在するシステムでprocファイルシステムを使用できます。例えば。 Linuxでは、/ proc/self/fdは開いているファイル記述子をすべて一覧表示します。そのディレクトリを反復処理して、> 2をすべて閉じます。反復処理中のディレクトリを示すファイル記述子は除きます。

8

プログラムがforkexecを呼び出すする場合は、手動exec前にそれらをクローズする必要はありませんので、あなたが本当にO_CLOEXECフラグですべてのファイル記述子を開く必要があります。また、ファイルを開いた後にfcntlを使用してこのフラグを追加することもできますが、これはマルチスレッドプログラムの競合条件の影響を受けます。

+0

レースへようこそ。 – ybungalobill

関連する問題