rendered paste body#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
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;
}