Nececitamos implementar los pipes y su redireccionamiento correspondiente;
Esto puede conllevar a que hagamos un cambio bruto en el codigo,
tanto en la parte del parser, como la redirecion creada anteriormente para los pipes.
podemos tener una referencia de clean code aqui
Idea para la remodelacion del parser
t_ps *p_fill_ps(t_lx *lex, t_ps *par)
{
t_ps *curr;
int fd[2];
curr = p_new_node(NULL, lex);
par = curr;
while (lex)
{
p_fill_content(curr, lex);
if (lex && lex->token == PIPE)
{
lex = lex->next;
pipe(fd);
if (curr->outfile == 1)
curr->outfile = fd[1];
curr = p_new_node(curr, lex);
curr->infile = fd[0];
}
else if (lex)
lex = lex->next;
else
break ;
}
return (par);
}
Idea para la remodelacion del ejecutor y implementacion del pipe
void ft_execute(t_info *info)
{
pid_t pid;
while (info->par)
{
if (check_builtin(info->par->cmd) && info->n_cmds == 1)
ft_builtins(info);
else
{
g_signal_detector = MID_CMD;
pid = fork();
if (pid == 0)
{
if (check_builtin(info->par->cmd))
ft_builtins(info);
else
exec_cmd(info);
}
else
waitpid(-1, &info->status, 0);
g_signal_detector = BASE;
ft_error_msg(info, 0);
}
ft_next_cmd(info);
}
}
La idea es hacer que todas las redirecciones sean ejecutadas por un proceso hijo, para asi no preucuparnos mucho por dup2();