我的作業任務是編寫一個C程序,該程序創建4個子進程,每個子進程必須使用整數進行處理並將其發送給另一個執行其他操作的子進程它和最後一個必須打印更改的值。我必須使用匿名管道來進行孩子之間的溝通。家長過程除了爲孩子打開管道之外沒有別的工作。我已經編寫了這個程序,但問題是當我嘗試使用最後一個孩子打印數字時,我得到了有趣的輸出。它打印出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);
}
對於這種情況,我需要做些什麼,只是爲了得到一個(和適當的)輸出?
您需要buf [5]我認爲,假設int在您的機器中長度爲4個字節。 – MayurK