From: Dominik Kaiser Date: Fri, 25 Oct 2024 10:51:07 +0000 (+0200) Subject: Finish pipes I guess X-Git-Url: https://git.dkaiser.de/?a=commitdiff_plain;h=07522e059d2956014b8d97f39b72a90c6dc6a7c6;p=42%2Fminishell.git Finish pipes I guess Somehow this worked at the first try. This'll have to be tested more thoroughly. --- diff --git a/src/interpreter.c b/src/interpreter.c index f6757c4..e08d289 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -6,7 +6,7 @@ /* By: dkaiser #include -int eval_rec(t_node *node, t_env *env); +static int eval_rec(t_node *node, t_env *env, int in_fd); int eval(t_node *node, t_env *env) { @@ -33,7 +33,7 @@ int eval(t_node *node, t_env *env) } if (pid == 0) { - result = eval_rec(node, env); + result = eval_rec(node, env, STDIN_FILENO); exit(result); } else @@ -43,11 +43,15 @@ int eval(t_node *node, t_env *env) return (result); } -int eval_rec(t_node *node, t_env *env) +static int eval_rec(t_node *node, t_env *env, int in_fd) { pid_t pid; int result; + int p[2]; + result = pipe(p); + if (result == -1) + return (EXIT_FAILURE); if (node->type == PIPE_NODE) { pid = fork(); @@ -57,12 +61,17 @@ int eval_rec(t_node *node, t_env *env) } if (pid == 0) { + close(p[0]); + dup2(in_fd, STDIN_FILENO); + dup2(p[1], STDOUT_FILENO); result = execute_cmd(&node->content.pipe.left->content.cmd, env); exit(result); } else { - result = eval(node->content.pipe.right, env); + close(p[1]); + dup2(p[0], STDIN_FILENO); + result = eval_rec(node->content.pipe.right, env, p[0]); } } else if (node->type == CMD_NODE)