• 締切済み

UNIXにおけるパイプラインの実現

C言語で簡単なシェルを作成しているのですがパイプラインの処理がいまいちわかりません(とりあえずpipeとfork,dupをつかって標準出力を切り替えるのはわかります。) 以下のような感じでps コマンドを使いプロセスの親子関係を調べてみました。 @ubuntu-desktop:~$ ps -l > a.txt | wc | nl 1 0 0 0 @ubuntu-desktop:~$ cat a.txt F S UID PID PPID CMD 0 S 1000 5214 5208 bash 0 R 1000 5295 5214 ps 0 R 1000 5296 5214 wc 0 S 1000 5297 5214 nl 結果的にコマンドが子で親がシェルになっているのはわかったんですが これはどのようにパイプラインでデータの受け渡しをしているのでしょうか??

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

何を質問しているのかがよくわからないんですけど.... 今の例だと, bash が 1. pipe 2. fork 3. dup 4. 子プロセスが ps を exec 以下, wc と nl に対して同じようなことを繰り返す という処理をしています. で最後の行に関していえば, 「pipe を発行したときにカーネルがこっそりとファイルを作っている」と思えばいいんじゃないかな.

poanta
質問者

補足

回答ありがとうございます、意味不明な質問ですいませんでした。 知りたい事としては、子プロセスの出力(コマンドの結果)をパイプで送る際の方法です。 親の標準入力につなげてしまうか、ファイルディスクリプタをとっておいて次のコマンドの子プロセスでそのファイルディスクリプタから前の結果を受け取るかの方法があるかなと考えたんですが、どっちの方がよいのかと 思い質問させていただきました。

関連するQ&A