#include "mypipe.h" #include #include int exec_pipe(char **argv_left, char **argv_right) { int fds[2]; if (pipe(fds)) return 1; pid_t pid = fork(); if (pid == 0) { // close read end close(fds[0]); // redirect stdout to write end dup2(fds[1], STDOUT_FILENO); // tell OS to close write end after exec fcntl(fds[1], F_SETFD, FD_CLOEXEC); // exec left execvp(argv_left[0], argv_left); return 0; } else if (pid > 0) { // close write end close(fds[1]); // redirect stdin to read end dup2(fds[0], STDIN_FILENO); // tell OS to close read end after exec fcntl(fds[0], F_SETFD, FD_CLOEXEC); // exec right execvp(argv_right[0], argv_right); // return 1 return 1; } else { close(fds[0]); close(fds[1]); return 1; } }