web-dev-qa-db-ja.com

ファイル記述子の共有

ファイル記述子が各プロセスに固有である場合(つまり、2つのプロセスが同じファイル記述子IDを使用して別の開いているファイルを参照する場合)、ソケットなどで転送ファイル記述子(共有mmapなど)を共有するにはどうすればよいですか?

各プロセスでカーネルが同じ数値アドレス範囲にマップされていることに依存していますか?

3
benjimin

ソケットを介してファイル記述子を共有すると、カーネルが仲介します。 the cmsg(3) macros を使用してデータを準備し、 sendmsg(2) を使用して送信し、- recvmsg(2) 。カーネルは後の2つの操作に関与し、ファイル記述子からファイル記述子を送信するために必要なデータへの変換を処理し、受信プロセスでファイル記述子を使用できるようにします。

異なるプロセスの同じfdが同じファイルをどのように指すことができますか? は有用な背景情報を提供します。送信プロセスは、その(プライベート)ファイル記述子テーブルに関連する何かを意味するファイル記述子を送信します。カーネルは、システム全体の開いているファイルテーブルのマッピング先を認識し、必要に応じて受信プロセスのファイル記述子テーブルに新しいエントリを作成します。

4
Stephen Kitt