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() :
Voici mes premières tentatives de réponses :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 prog1 & prog2 a b | prog3 > truc ; prog4 <truc
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() !
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); }
Pour la fin de la ligne de commande prog4 < truc, j'ai ceci :
Même problème, comment relier tout ça avec ce qui se passe avant avec prog2 et prog4 ?!
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);
J'espère que l'idée est assez claire ... !
Partager