私のC ++プログラムでは、fork()
. フォークした後、プログラムはそれ自体を複製して実行します。子プロセスは、開いているすべてのファイル ハンドルを共有します。
私の質問は、「開いているさまざまなファイルが何であるかを知る方法はありますか? これらのファイル ハンドルを閉じて、別のファイルで再度開くことができるようにします。
注: Linux マシンを使用しています。
/proc/<pid>/fd/*
チェックアウトすることで(または/proc/self/fd
現在のプロセスが必要な場合)、Linuxの特定のプロセスでどのファイルが開かれているかを確認できます。各ファイルには、対応する fd の名前が付けられたシンボリック リンクがあり、そのリンクは開いているファイルを指していますreadlink()
。dup2()
新しいファイルの fd をその fd に複製するための呼び出しを使用して、特定の fd をリダイレクトできます。
とはいえ、すべてのプロセスを管理しているので、内部で追跡する方が理にかなっているかもしれません。これはまた、はるかにポータブルです。