- ベストアンサー
パイプのプログラム
ここまでプログラムはできているのですが、親プロセスと子プロセスのところが分かりません。どなたかお願いします! 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]); /*子プロセス*/
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、pipe() や execv(), fork() などの関数について、 勉強したらどうでしょう?(あとは、close や dup も) 処理としては、#1 さんの書いているように、 親プロセスで、パイプのつなぎかえをしたあと(dup, close)、 コマンド a の呼び出しを行い(exec)、 子プロセスでもパイプをつなぎかえた後、 コマンド b の呼び出しをしたらいいのでは? pipe については Google などの検索サイトで探せばたくさん出てきます。
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 今日までの課題なのですが、できたらプログラムの中身もお願いできませんか? この課題は、周りの人も分からなくて困っています。 宿題を見ず知らずの誰かにやってもらうおつもりですか?
- kaitou-man
- ベストアンサー率60% (86/141)
> 親プロセスと子プロセスのところが分かりません。 って、そこがこのプログラムの肝じゃないですか。 ここまでできていますっていうのも、学校で出た課題そのままという気がします。 親プロセスがaを担当するんだとすると、 標準出力を閉じて、パイプの一方を閉じて、他方をdupして、aを実行 という手順です。子プロセスは、 標準入力を閉じて、親とは反対側のパイプを閉じて、他方をdupして、bを実行 ですね。パイプを閉じるのは念のためなのでしなくてもOKです。
お礼
ありがとうございます。 今日までの課題なのですが、できたらプログラムの中身もお願いできませんか? この課題は、周りの人も分からなくて困っています。