• ベストアンサー

パイプのプログラム

ここまでプログラムはできているのですが、親プロセスと子プロセスのところが分かりません。どなたかお願いします! XXX%a.out a|b のように入力して、コマンドaとコマンドbを、並列処理するプログラムを作っています。 なお、コマンドの実行は execl("/bin/コマンド名",コマンド名,NULL) というシステムコールを利用します。 パイプの生成およびファイル記述子の複製は、 pipe(pipefd)、 dup(pipefd[0])またはdup(pipefd[1]) のシステムコールを用います。 プログラム #include<stdio.h> #include<string.h> main(int argc,char *argv[]) { int pipefd[2],pid; char cmd_a[20]="/bin/"; if(pipe(pipefd)==-1) { perror("pipe error"); exit(1); } if((pid=fork())==-1){ perror("fork error"); exit(1); } if(pid!=0){ /*親プロセス*/ strcat(cmd_a,argv[1]); /*子プロセス*/

質問者が選んだベストアンサー

  • ベストアンサー
  • kei_
  • ベストアンサー率29% (5/17)
回答No.3

まず、pipe() や execv(), fork() などの関数について、 勉強したらどうでしょう?(あとは、close や dup も) 処理としては、#1 さんの書いているように、 親プロセスで、パイプのつなぎかえをしたあと(dup, close)、 コマンド a の呼び出しを行い(exec)、 子プロセスでもパイプをつなぎかえた後、 コマンド b の呼び出しをしたらいいのでは? pipe については Google などの検索サイトで探せばたくさん出てきます。

参考URL:
http://www.google.co.jp/search?num=20&hl=ja&inlang=ja&ie=Shift_JIS&q=pipe+close&btnG=Google+%8C%9F%8D%F5&lr=lang_ja

その他の回答 (2)

回答No.2

> 今日までの課題なのですが、できたらプログラムの中身もお願いできませんか? この課題は、周りの人も分からなくて困っています。 宿題を見ず知らずの誰かにやってもらうおつもりですか?

回答No.1

> 親プロセスと子プロセスのところが分かりません。 って、そこがこのプログラムの肝じゃないですか。 ここまでできていますっていうのも、学校で出た課題そのままという気がします。 親プロセスがaを担当するんだとすると、 標準出力を閉じて、パイプの一方を閉じて、他方をdupして、aを実行 という手順です。子プロセスは、 標準入力を閉じて、親とは反対側のパイプを閉じて、他方をdupして、bを実行 ですね。パイプを閉じるのは念のためなのでしなくてもOKです。

raul-man
質問者

お礼

ありがとうございます。 今日までの課題なのですが、できたらプログラムの中身もお願いできませんか? この課題は、周りの人も分からなくて困っています。

関連するQ&A