передача stdout в другую программу stdin не выполняется; сообщения не проходят через трубу

Я пытаюсь запрограммировать оболочку с вилкой и конвейером на 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 [я проверил]) / К сожалению, вторая программа не получает результат первой, похоже, что она получает. Кто-нибудь может заметить ошибку?


person pipeman    schedule 16.11.2020    source источник
comment
Во-первых, pipe нужно вызывать перед fork.   -  person kaylum    schedule 17.11.2020
comment
Также извлеките минимальный воспроизводимый пример и предоставьте его здесь. Кроме того, вы не говорите того, что наблюдали, а только свою интерпретацию. Пожалуйста, пройдите тур и прочтите Как Спросите.   -  person Ulrich Eckhardt    schedule 17.11.2020
comment
спасибо @kaylum. Оно работает.   -  person pipeman    schedule 17.11.2020


Ответы (1)


кредит @kalyum. Я форкнул перед созданием канала, поэтому у каждого процесса был свой канал. поэтому связь между 2.

person pipeman    schedule 16.11.2020