I am trying to write a program to run ls ../ | grep sg | sort
with execvp and pipe in linux
The program does what I want it to do but the sequence is wrong.
The shell always prompt before the result.
How can I print the result before the shell prompt?
Here is my code:
Code:
#include <stdio.h>
#include <unistd.h>
int main(){
char cmd[255];
int fd[2];
int fd2[2];
int i;
pid_t id;
pipe(fd);
pipe(fd2);
for(i = 1; i < 4; i++){
id = fork();
if(id==0){
switch (i){
case(1): close(fd[0]);
close(fd2[0]);
close(fd2[1]);
dup2(fd[1],STDOUT_FILENO);
char * args1[] = { "ls", "../", NULL};
execvp(args1[0],args1);
break;
case(2): close(fd2[0]);
dup2(fd2[1],STDOUT_FILENO);
close(fd[1]);
dup2(fd[0],STDIN_FILENO);
char *args2[] = {"grep","sg",NULL};
execvp(args2[0],args2);
break;
case(3): close(fd[0]);
close(fd[1]);
close(fd2[1]);
dup2(fd2[0],STDIN_FILENO);
char *args3[] = {"sort",NULL};
execvp(args3[0],args3);
}
}else{
waitpid(id);
}
}
return 0;
}