9

fork を使用せずに 2 つのプロセス間でパイプを使用し、たとえば socket でファイル記述子を共有できますか? 別の解決策は必要ありません。分岐していない 2 つのプロセス間のパイプが必要です。

4

2 に答える 2

9

名前付きパイプ (FIFO) を使用できます。

する場合はmkfifo <common path>、このパスを両方のプロセスで使用します。1 つは読み取り用、もう 1 つは書き込み用です。その後、通常のパイプと同じ動作になります。

于 2012-11-13T08:43:54.630 に答える
7

最も簡単な解決策は、名前付きパイプを使用することです。これは、両方のプロセスが参照できるように、ファイルシステムに名前を持つパイプです。mkfifo()呼び出しで名前付きパイプが作成され、open()(1 つのプロセスが読み取り用に開き、もう 1 つのプロセスが書き込み用に開く必要があります) で開かれます。

無関係な 2 つのプロセスで匿名パイプを使用することもできますが、そのためには、パイプを作成したプロセスから他のプロセスに開いているファイルの説明を渡す必要があります。これは、UNIX ドメイン ソケットでメッセージを使用して行うことができますSCM_RIGHTSが、UNIX ドメイン ソケットがある場合は、パイプの代わりにそれを使用して通信することができます。Linux 固有の方法は、最初のプロセスのパイプの終わりを表すシンボリック リンクで 2 番目のプロセスを使用することですが、これは非常にバロック的ですopen()/proc/<pid>/fd/<fd>

于 2012-11-13T09:52:38.587 に答える