Итак, в моей программе пользователь дает три аргумента. Затем я перевожу его на троих детей.Каков правильный способ чтения из нескольких труб?
Двое детей все делают свои расчеты, а затем выходят. Последний ребенок отображает результаты.
Родитель ждет, пока все дети закончат, а затем просто прекратит выполнение программы.
Резюме того, что делают дети:
inputs are a, b, c.
child0: c0 = a*b
child1: c1 = b*c
overview: printf("%d %d", c0, c1);
Я не могу понять, как получить обзор на печать правильно. Он продолжает печатать странные поврежденные символы или коробки.
У кого-нибудь есть рекомендации относительно того, как это сделать правильно? Я прочитал книгу, но только подробно рассмотрел отдельные дочерние родительские трубы. Это касается нескольких детей, и я думаю, что там я запутался. Спасибо за вашу помощь!
код ниже:
int main(int argc, char *argv[]) {
int fd[4];
int a, b, c, c0, c1, status;
char char0[10];
char char1[10];
pid_t child0;
pid_t child1;
pid_t overview;
// Set argv to ints
a = atoi(argv[1]);
b = atoi(argv[2]);
c = atoi(argv[3]);
// Pipe
pipe(fd);
// child0
if((child0 = fork()) == 0) {
close(fd[2]);
c0 = a*b;
sprintf(char0, "%d", c0);
write(fd[0], char0, 10);
close(fd[0]);
exit(0);
}
// child1
if((child1 = fork()) == 0) {
close(fd[2]);
c1 = b*c;
sprintf(char1, "%d", c1);
write(fd[1], char1, 10);
close(fd[1]);
exit(0);
}
// overview
if((overview = fork()) == 0) {
close(fd[0]);
close(fd[1]);
read(fd[2], char0, 10);
read(fd[2], char1, 10);
printf("%s %s", char0, char1); //Prints weird stuff??
close(fd[2]);
exit(0);
}
// Wait for children to finish
waitpid(child0, &status, 0);
waitpid(child1, &status, 0);
waitpid(overview, &status, 0);
exit(0);
}
не печатает правильно после изменения моего кода. Ты знаешь почему? – user2837858
какие значения вы передаете в качестве аргументов и какой результат вы получаете. и, как я сказал cross, проверьте, что вы используете правильный дескриптор для чтения и записи. – Ali786
Я просто перехожу в 1 2 3, так что это будет './a.out 1 2 3'. Ожидаемый результат должен быть «2 6», но я получаю случайный набор символов, таких как ' M^ēu u '. Я проверил, что вычисления действительно работают при отладке. Он просто никогда не распечатывается правильно. – user2837858