[Implémentation] Pipe en C
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
Code:
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);
} |
mais je n'obtiens pas le résultat escompté...
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...:)