この問題に必要なものを理解するのに役立つ人はいますか?そして実行ステップは何ですか?
「パイプを作成し、両方のプロセスをフォークし、パイプを介してデータを送信する簡単なプログラムを作成します。(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) でもあります。
- 高級トイレ