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 : 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);
}
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...