私の宿題は、4つの子プロセスを作成するCプログラムを記述し、各子が整数を使って何かをして、それと最後のものは変更された値を出力する必要があります。子供同士のコミュニケーションには匿名のパイプを使わなければならない。親プロセスには、子パイプ用のパイプを開く以外の作業はありません。私はプログラムを書いたが、最後の子を使って数字を印刷しようとすると面白い結果が出るという問題がある。 1つではなく8つの数字を表示します(実際には1つは正しいものです)。コードの一部は次のとおりです。パイプを使ってCの子プロセス間でデータを渡す
int pipe1[2];
int pipe2[2];
int pipe3[2];
pipe(pipe1);
pipe(pipe2);
pipe(pipe3);
int j;
close(pipe1[1]); //close pipes for writing on parent process
close(pipe2[1]);
close(pipe3[1]);
for (j = 0; j < 4; j++) {
switch(fork()) {
case 0:
if (j == 0) {
int value = 100;
write(pipe1[1], &value, sizeof(int));
close(pipe1[1]);
}
else if (j == 1) {
int value;
read(pipe1[0], &value, sizeof(int));
close(pipe1[0]);
value = value * 10;
write(pipe2[1], &value, sizeof(int));
close(pipe2[1]);
}
//and so on until the last process
else if (j == 3) {
int value;
read(pipe3[0], &value, sizeof(int));
char buf[4] = {0};
memset(buf, 0, sizeof(buf));
snprintf(buf, sizeof(value), "%d ", value);
write(1, buf, strlen(buf));
}
break;
}
}
close(pipe1[0]);
close(pipe2[0]);
close(pipe3[0]);
sleep(1);
int k;
for (k = 0; k < 4; k++) {
wait(0);
}
1つ(と適切なもの)の出力を得るにはどうすればよいですか?
あなたはbuf [5]が必要です。intが4バイト長であると仮定します。 – MayurK