Bonjour à tous,
voilà je m'entraine sur les fonctions dup2,pipe,read,...et je suis un peu perdu malgré les quelques tutos trouvés sur le net .
Donc mon but est de ré-implémenter le pipe unix càd : ./pipe_c "more test.c" "grep int"
affichera les lignes contenant int dans test.c
Je dois donc utiliser un pipe et rediriger la sortie standard de argv[1] vers l'entrée standard de argv[2] en utilisant dup2 mais bon comme je l'ai dis ci dessus ...je suis un peu à la masse :s
mais je n'obtiens pas le résultat escompté...
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 /*************************************************************************** * pipe_c.c * * Sat Nov 11 11:23:52 2006 * 2006 Tuxico ****************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> int main(int argc, char *argv[]) { int pid; int fdpipe[2]; if ( pipe(fdpipe) == -1 ) { perror("pipe"); exit(-1); } switch(pid = fork()) { case -1: perror("fork"); exit(-1); case 0: /* cette portion de code est exécutée par le fils */ /* lorsque le processus écrira sur l'entrée standard (1) il le fera en fait dans le pipe fdpipe[1]) */ dup2(fdpipe[1], 1); close(fdpipe[0]); close(fdpipe[1]); execlp(argv[1], argv[1],NULL); /* pas besoin de break, ce code n'existe déjà plus à l'exécution */ default : /* cette portion de code est exécutée par le père */ dup2(fdpipe[1], 0); close(fdpipe[0]); close(fdpipe[1]); execlp(argv[2],argv[2], NULL); } return(0); }
Dois-je utiliser read pour récupérer fdpipe[1] comme entrée pour argv[2]?
suis-je complètement à coté de la plaque?
merci de votre aide...![]()
Partager