Трубы, dup2 и exec ()

Я должен написать оболочку, которая может запускать трубы. Например, такие команды, какls -l | wc -lMsgstr "Я успешно проанализировал команду, заданную пользователем, как показано ниже:

"ls" = firstcmd

"-l" = frsarg

"wc" = scmd

"-l" = secarg

Теперь я должен использовать две вилки, так как команды - две и труба. Блок кода, который я написал для выполнения команды, выглядит следующим образом:

pid_t pid;
int fd[2];

pipe(fd);
pid = fork();

if(pid==0)
{        
    dup2(fd[WRITE_END], STDOUT_FILENO);
    close(fd[READ_END]);
    execlp(firstcmd, firstcmd, frsarg, (char*) NULL);
}
else
{ 
    pid=fork();

    if(pid==0)
    {
        dup2(fd[READ_END], STDIN_FILENO);
        close(fd[WRITE_END]);
        execlp(scmd, scmd, secarg, (char*) NULL);
    }
}

Поэтому, когда я запускаю свою оболочку, и я ввожу командуls -l | wc -l (например) результат от execs не отображается, но оболочка продолжает работать нормально.

Странно то, что результат команды отображается только тогда, когда я завершаю свою оболочку с помощью «exit» или «^ C».

Что не так с этим выводом? Почему он не появляется сразу после ввода команды?

Ответы на вопрос(2)

Ваш ответ на вопрос