transformation ligne de commande shell en C avec processus et tube
Bonjour,
Eh oui c'est encore moi ! Je suis en train de réviser pour un partiel de systèmes et j'ai malheureusement beaucoup de questions et encore plus malheureusement, j'ai beau envoyer mes requêtes à mon prof, je n'ai pas de réponses ! Le partiel étant demain, je compte à présent sur vos lumières !
Voici le petit exercice qui me pose beaucoup de souci :
Je dois transformer la commande shell suivant en programme C sans utiliser la fonction system() :
Code:
1 2
|
prog1 & prog2 a b | prog3 > truc ; prog4 <truc |
Voici mes premières tentatives de réponses :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
int fd[2];
pipe(fd);
if(fork()==0){
execlp("prog1","prog1",NULL);
}else{
if(fork()>0){
close(fd[0]);
dup2(fd[1],1);
execlp("prog2","prog2",a,b,NULL);
}else{
close(fd[1]);
dup2(fd[0],0);
execlp("prog3","prog3",NULL);
} |
Et là je bloque !! Je ne sais pas comment faire pour rediriger le résultat de prog3 vers truc ! Disons que je m'y perds un peu (beaucoup) dans les fork() !
Pour la fin de la ligne de commande prog4 < truc, j'ai ceci :
Code:
1 2 3 4 5
|
fd=open("truc",O_RDONLY,0);
dup2(fd,0);
close(fd);
execlp("prog4","prog4",NULL); |
Même problème, comment relier tout ça avec ce qui se passe avant avec prog2 et prog4 ?!
J'espère que l'idée est assez claire ... !