Tubos, dup2 e exec ()

Eu tenho que escrever uma concha que pode executar tubos. Por exemplo comandos comols -l | wc -l". Analisei com sucesso o comando dado pelo usuário como abaixo:

"ls" = primeiro cmd

"-l" = frsarg

"wc" = scmd

"-l" = secarg

Agora eu tenho que usar dois garfos, já que os comandos são dois e um cano. O bloco de código que escrevi para executar o comando é o seguinte:

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);
    }
}

Então, quando eu executo meu shell e insiro o comandols -l | wc -l (por exemplo) o resultado dos executivos não aparece, mas o shell continua funcionando normalmente.

O estranho é que o resultado do comando é exibido apenas quando eu termino meu shell com "exit" ou "^ C".

O que há de errado com essa saída? Por que ele não aparece logo após eu inserir o comando?

questionAnswers(2)

yourAnswerToTheQuestion