Я пытаюсь запрограммировать оболочку с вилкой и конвейером на C. Я попытался разделить свой процесс на 2 и заставить сына говорить со своим родителем: stdout, чтобы он был стандартным вводом дочернего элемента. Думал реализовать через пайп. Вот моя попытка:
void split(){
int fork_id = fork();
int pipes[2];
pipe(pipes);
if (fork_id) {
//parent
dup2(pipes[1], STDOUT_FILENO);
close(pipes[0]);
close(pipes[1]);
} else {
//child
dup2(pipes[0], STDIN_FILENO);
close(pipes[0]);
close(pipes[1]);
}
}
Впоследствии я запускаю программное обеспечение с execvp (они запускаются с правильным argv [я проверил]) / К сожалению, вторая программа не получает результат первой, похоже, что она получает. Кто-нибудь может заметить ошибку?
pipe
нужно вызывать передfork
. - person kaylum   schedule 17.11.2020