Цель - использовать dup, dup2 и pipe для связи между родительским и дочерним процессами. Просто чтобы понять, как использовать dup и pipe. Функция multby, вызываемая дочерним процессом, принимает число в качестве аргумента (3) и умножает его на ввод пользователя (в данном случае 5, как напечатано в родительском), чтобы получить продукт. (должно быть 15)
#include <stdio.h>
#include <unistd.h>
void main(int argv, char *argc) {
int testpipe[2];
pipe(testpipe);
int PID = fork();
if (PID == 0) {
dup2(testpipe[0], 0);
close(testpipe[1]);
execl("./multby", "multby", "3", NULL);
close(testpipe[0]);
close(0);
} else {
dup2(testpipe[1], 1);
close(testpipe[0]);
printf("5");
close(1);
close(testpipe[1]);
wait(NULL);
}
}
Вот код для мультбай. Я также добавил несколько операторов fprintf для устранения неполадок. В частности, он печатает 2 числа, которые нужно умножить (которые должны быть 3 и 5, как указано выше).
#include <stdio.h>
int main(int argv, char *argc[]) {
fprintf(stderr,"exec successful\n");
if (argv < 2) {
fprintf(stderr, "Usage: %s <factor>\n", argc[0]);
return 1;
}
size_t a, b;
sscanf(argc[1], "%zu", &a);
fprintf(stderr, "a: %zu\n", a);
if (scanf("%zu", &b) != 1) {
fprintf(stderr, "No input %zu\n", a);
return 1;
}
fprintf(stderr, "b: %zu\n", b);
printf("%zu", a*b);
fprintf(stderr, "multby successful\n");
return 0;
}
Однако, это мой результат: exe c success a: 3 Нет ввода 3
5 не было зарегистрировано с конца чтения канала.
Может кто-нибудь сообщить мне, что я делаю неправильно?