#include // write, fork, execve, pipe #include // printf #include // strcmp #include // pid_t #include // waitpid #define STDIN 0 #define STDOUT 1 #define STDERR 2 void print_cmd(char **av) { int i; int size; i = 0; while (av[i]) { size = 0; while (av[i][size] != '\0') size++; write(1, av[i], size); write(1, " ", 1); i++; } write(1, "\n", 1); } //void exec_cmd(char **av, int end, char **en) void exec_cmd(char **av, char **en) { pid_t pid = fork(); // av[end] = NULL; if (pid == 0) // child process { execve(av[0], av, en); } else // parent process { waitpid(pid, NULL, 0); } } int main(int ac, char **av, char **en) { int i; int start; if (ac <= 1) return (0); i = 1; while (i < ac) { start = i; while (i < ac && strcmp(av[i], "|") && strcmp(av[i], ";")) i++; av[i] = NULL; // print_cmd(&av[start]); exec_cmd(&av[start], en); if (i < ac) i++; } return (0); } // https://www.rozmichelle.com/pipes-forks-dups/