Нет вывода при использовании выполнения команды канала с execvp

#shell #pipe #fork #execvp #dup

#оболочка #канал #fork #execvp #дублирование

Вопрос:

Я выполняю команды в своей микросхеме. Отдельные команды, похоже, работают нормально, но при предоставлении таких команд канала, как ls || sort , он не выдает вывод немедленно. Когда я выхожу из программы, вывод всех команд канала печатается. Я не уверен, как это исправить. Ниже приведен мой код для команд канала.

 pid = fork(); /* Creating  child   */

if(pid==0) /*Inside child  */
{
    dup2(fd[1],STDOUT_FILENO); /* Redirecting the stdout to the pipe  using the  dup2 */
    close(fd[0]); /*Closing the read descriptor of pipe */
    execvp(commandExecute1[0],commandExecute1); /* Execute the first command */
}
else
{  
    /*Inside  Parent */ 
    if((pid=fork())==0) /*second child */
    {
        dup2(fd[0],STDIN_FILENO); /* Redirecting standard input to the read descriptor of pipe */
        dup2(STDOUT_FILENO,fd[1]);  /* Redirecting the pipe descriptor o/p to STDOUT */
        close(fd[1]);  /*Close write file descriptor of pipe */
        execvp(commandExecute2[0],commandExecute2); /* Running the second command*/
    }
}  
  

Я что-нибудь пропустил?

Комментарии:

1. кто-нибудь может мне помочь в этом.

2. Для одного дочернего элемента вы переходите от дочернего элемента к родительскому. child | parent При двойном дочернем элементе вы должны передавать данные от дочернего элемента к дочернему элементу и от дочернего элемента к родительскому. child | child | parent Однако вы не можете использовать одну пару каналов. Вы должны использовать 2 пары каналов.

3. Попробует, что alvits

4. Сейчас я получаю вывод, но весь второй процесс запускает весь вывод

5. Скорее всего, вы неправильно подключили каналы. Первая пара каналов находится строго между 2 дочерними элементами. Вторая пара каналов находится строго между 2-м дочерним и родительским процессами. Затем родительский элемент может считывать данные со стороны чтения канала.