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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
prog1 & prog2 a b | prog3 > truc ; prog4 <truc
Voici mes premières tentatives de réponses :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ... !