//This is between Child and parent int fd2[2]; pipe(fd2); //Parent begins... if (dup2(fd[0], 0) == -1) /* sort is the parent */ perror("Failed to redirect stdin of sort"); else if ((close(fd[0]) == -1) || (close(fd[1]) == -1)) { perror("failed at closing"); } else { //Output (1) of execl should go into fd2[1] not into terminal! if (dup2(1,fd2[1])==-1 || dup2(0,fd2[0]) == -1) { perror("I blame charlie"); } if (execl("/usr/bin/sort", "sort", "-r", NULL) == -1) { perror("could not sort anything"); }