Моя домашняя задача - написать программу на языке C, которая создает 4 дочерних процесса, и каждый ребенок должен что-то делать с целым числом и отправить его следующему ребенку, который делает что-то еще с он и последний должны напечатать измененное значение. Я должен использовать анонимные каналы для общения между детьми. У родительского процесса нет другой работы, кроме как открыть трубы для детей. Я написал программу, но проблема в том, что я получаю смешной вывод, когда пытаюсь напечатать номер с использованием последнего ребенка. Он печатает 8 чисел вместо одного (фактически один из них является правильным). Часть кода имеет следующий вид:Использование труб для передачи данных между дочерними процессами в 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