Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/wait.h>
- int main(int argc, char* argv[]) {
- int pipefd[argc - 2][2];
- for (int i = 0; i < argc - 1; i++) {
- pipe(pipefd[i]);
- }
- pid_t childs[argc - 1];
- for (int i = 1; i < argc; i++) {
- char* cmd = argv[i];
- childs[i-1] = fork();
- if (childs[i-1] == 0) {
- if (i-2 >= 0) {
- close(pipefd[i-2][1]);
- dup2(pipefd[i-2][0], 0);
- close(pipefd[i-2][0]);
- }
- if (i-1 <= argc-3) {
- close(pipefd[i-1][0]);
- dup2(pipefd[i-1][1], 1);
- close(pipefd[i-1][1]);
- }
- execlp(cmd, cmd, NULL);
- return 1;
- } else {
- close(pipefd[i-2][1]);
- close(pipefd[i-2][0]);
- }
- }
- for (int i = 0; i < argc-1; i++) {
- waitpid(childs[i], NULL, 0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment