19

プロセス内で開いているすべてのファイルを (プロセス自体から) 見つけるにはどうすればよいですか?

fork()これは、後(前)に知っておくと便利なようですexec()

getdtablesize()の存在と、より移植性の高いの存在は知っていますが、その背後に開いているファイルがあるかどうかに関係なく、すべての有効なsysconf(_SC_OPEN_MAX)ファイル記述子を閉じようとするのは非効率的です。(私は時期尚早の最適化の危険性も認識しています。これは私が推測する美学に関するものです:-)

4

4 に答える 4

9

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

于 2011-06-29T21:33:51.667 に答える
6

すべてのファイル記述子を閉じようとするのは非効率に思えるかもしれませんが、実際にはそれほど悪くはありません。ファイル記述子を検索するためのシステム コールの実装は、システムが良好であれば、かなり効率的です。

開いているファイル記述子を閉じるだけを見つけたい場合は、それが存在するシステムで proc ファイルシステムを使用できます。たとえば、Linux では、/proc/self/fd は開いているすべてのファイル記述子を一覧表示します。そのディレクトリを反復し、反復しているディレクトリを示すファイル記述子を除いて、>2 をすべて閉じます。

于 2009-08-22T07:34:48.053 に答える