2016-09-28 1 views
0

fork()とexecl()を使って "child"という別のプログラムを起動する "parent"というプログラムがあり、この2つのプログラム間のコミュニケーション。この通信を維持する最善の方法は、名前のないパイプを使用しているようです。 「親」プログラム側の要件についての文書や例を見つけるのは簡単ですが、「子」側でも同じことが分かりました。forkされた子プログラムの中で、ランチャープログラムとパイプ通信する必要があります

たとえば、私はこのガイドが良いと思うが、両方のプログラムの間で通信するために、プログラムでwhis execを起動しなければならないことを示していない、私はdup()を "ディスクリプタを共有することが、私は両方bettwen通信を確立するために、子の側に正しくパイプを参照してください誰?:記事で http://tldp.org/LDP/lpg/node11.html

答えて

1

、子プロセスを設定する(dup2が優れている)dupdup2を使用していますファイル記述子の1つを標準入力として使用します。
プロセスは標準出力と似ています(別のpipeとそれに関連するファイル記述子が必要です)。

親は、パイプの終わりを読み書きすることによって、子のstdioと通信できます。

子がexecである場合、これらのファイル記述子は継承されるため、同じパイプエンドポイントは子プロセスの標準入力と出力のままになります。言い換えれば

あなたは記事のようにdup/dup2でファイル記述子を設定している場合、あなたはあなただけ読んで、stdioの上で書くことができ、exec編過程で特別なことをする必要はありません。

+0

私はあなたを完全に理解しているかわかりません。つまり、親プロセスのすべての設定が親プロセスと親プロセスと通信できるのであれば、単に 'printf'を送信し、' scanf'を受け取るだけです。 – kroketor

+1

@kroketorはい、あなたがリンクしたページの "dup"使用例のポイントです。 – molbdnilo