このままだと、コンパイルエラーを起こしてしまいます。
#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <string.h> int main(void) { pid_t pid ; char buffer[10],result[10]; int pp[2] , qq[2]; int a , b , c ; pipe(pp); /* 親へデータを送るためのパイプ */ pipe(qq); /* 計算結果を子に送るためのパイプ */ pid = fork(); /* 親子のプロセスの生成 */ /* 子プロセスの動き */ if ( pid == 0 ) { close(pp[0]); close(qq[1]); /* 1つ目の変数の代入とパイプへの書き込み */ printf("a = "); fgets(buffer,10,stdin); write(pp[1],buffer,strlen(buffer)+1); /* 2つ目の変数の代入とパイプへの書き込み */ printf("b = "); fgets(buffer,10,stdin); write(pp[1],buffer,strlen(buffer)+1); /* 計算結果を読み込む */ read(qq[0],result,10); printf("a + b = %s\n",result); close(qq[0]); close(pp[1]); } /* 親プロセスの動き */ else { close(qq[0]); close(pp[1]); /* 1つ目の変数の読み込み */ read(pp1[0],buffer,256); a = atoi(buffer); /* 2つ目の変数の読み込み */ read(pp2[0],buffer,256); b = atoi(buffer); c = a + b ; /* 計算 */ sprintf(buffer,"%d",c); /* 計算結果をパイプへ書き込む */ write(qq[1],buffer,strlen(buffer)+1); close(pp[0]); close(qq[1]); } return(0); }原因はここで、pp1、pp2の変数が定義されてないからなのですが、
>read(pp1[0],buffer,256);
>read(pp2[0],buffer,256);
read(pp[0],buffer,256);
read(pp[1],buffer,256);
このように設定しても、期待通りの動作(足し算)をしません。
どのようにしたら、よいでしょうか?
参考サイト
http://www.geocities.jp/sugachan1973/doc/funto45.html