2012-11-13 6 views
7

フォークを使わずに2つのプロセスの間でパイプを使用し、ソケットなどのファイル記述子を共有できますか?私は別の解決策を必要としません、私は2つのプロセスの間にパイプを必要としません。パイプをフォークなしで使用できますか?

+1

@pst UNIXソケットは、 'connect()'、 'accept()'など全く違った方法でアクセスされます。 – glglgl

答えて

9

名前付きパイプ(FIFO)を使用することができます:あなたがmkfifo <common path>を行う場合は、両方のプロセスでの使用にこのパスを、読み取り用と書き込み用1、

を。それから、あなたは普通のパイプと同じ振る舞いをします。

4

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

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

関連する問題