2つのプロセスを分岐するパイプを作成する方法

2つのプロセスを分岐するパイプを作成する方法

この問題に必要なものを理解するのに役立つ人はいますか?そして実行ステップは何ですか?

「パイプを作成し、両方のプロセスをフォークし、パイプを介してデータを送信する簡単なプログラムを作成します。(who)と(wc)の2つの標準プログラムを使用してください。」

答え1

Linuxパイプとは何か知っていますか?そうでない場合は、それについて読んでください。ここ。したがって、非常に基本的なタスクは、2つのプロセスを作成し、あるタスクの出力を別のタスクの入力に接続することです。ここに問題があります。

この質問は、どのタスクを使用するかを指定します。

  • who:現在ログインしているすべてのユーザーを1行に1つずつ一覧表示します。
  • wc:内容を計算する小さなツール - 単語数、行数、バイト...

これら2つのツールを使用すると、現在ログインしているユーザーの数を簡単に計算できます。

一般的なLinuxツールの1つの利点は、ほとんどがstdinで動作することです。 Linuxパイプは|左側のプロセスのstdoutを右側のプロセスのstdinに接続するので、パイプを使用するのに役立ちます!

これは質問の意味を理解するのに役立ちます...

答え2

パイプライン(intパイプラインfd [2])syscallの読み取り(man) - 2つのファイル記述子を返します。 1つは読み取り用で、もう1つは書き込み用です。次に、両方のプロセスをフォークします。それでも同じ(フォークされたプロセスにあるので)パイプラインfd []配列が返されたことがわかります。

次に、シェルでパイプをシミュレートするには、次の手順を実行する必要があります。

最初のプロセスでは:

  • ファイル記述子1を閉じる(標準出力)
  • dup() はパイプライン()から受け取ったファイル記述子を読み込みます。これで fd=1(stdout) でもあります。
  • 誰を処刑するのか

2番目のプロセスでは、次のことを行います。

  • ファイル記述子0(stdin)を閉じる
  • dup() はパイプライン()から受け取ったファイル記述子に書き込みます。これで fd=0(stdin) でもあります。
  • 高級トイレ

関連情報