我的作业任务是编写一个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