#include #include #include #include #include int main(void) { pid_t childpid; int fd[2]; //file descriptor1 int fd2[2]; //file descriptor2 if ((pipe(fd)==-1) || pipe(fd2) == -1) { printf(" pipe failed \n" ); } childpid = fork(); //CAT if (childpid==0) { if (dup2(fd[1] , 1) == -1) { perror("Failed to redirect stdout of ls"); } else if ((close(fd[0]) == -1) || (close(fd[1]) == -1)) { perror("failed at closing"); } else { if (execl("/bin/cat", "cat", "sortthis.txt", NULL) == -1) { perror("catting test failed"); } } return 1; } childpid = fork(); //SORT if (childpid == 0 ) { if ((dup2(fd[0], 0) == -1 ) || (dup2(fd2[1],1)==-1)) perror("Failed to redirect stdin of sort"); else if ((close(fd[0]) == -1) || (close(fd2[1]) == -1) ) { perror("failed at closing"); } else { if (execl("/usr/bin/sort", "sort", "-r", NULL) == -1) { perror("could not sort anything"); } } return 1; } childpid = fork(); //WORD COUNT if (childpid==0) { if (dup2(fd2[0] , 0) == -1) { perror("Failed to redirect stdout of sort"); } else if (close(fd2[0]) == -1) { perror("failed at closing"); } else { if (execl("/usr/bin/wc", "wc", "-cl", NULL) == -1) { perror("catting sort output failed"); } } return 1; } //Ignore parent for now... return 1; }