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?