Bonjour à tous,

Je dois faire un script en C qui utilisent 2 pipes ainsi qu'un fork().
Le rôle du programme est de lire une saisie au clavier par le pipe 1
exemple : 4 5
Le pipe1 envoi au pipe 2 le 4 5 qui lui calcul la somme 4 5 et qui renvois donc 9 au pipe 1.

Le programme ci dessous ne fonctionne pas.

Le lire.sh contient en shell
read param et un echo $param

Merci de votre aide


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
47
48
49
50
51
52
53
54
55
56
57
 
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
int main() {
  int n, p[2], p2[2];
  char c, c2;
 
  //creation des tube anonyme  
  if ( pipe(p) != 0 ) { 
    perror ("probleme appel pipe");
    exit (1);
  }
  if ( pipe(p2) != 0 ) { 
    perror ("probleme appel pipe");
    exit (2);
  }
  //on clone le process pour avoir 2 processus partageant le m?me pipe 
  if ( ( n = fork() ) == -1 ) { 
    perror ("probleme appel fork");  
    exit (3);
  } else if ( n == 0 ){ //le fils
   char texte2[30];
   int j;
   printf("Veuillez taper deux nombres en les sÈparant d'un espace puis appuyez sur entrÈe");
   dup2 (p[1],1);
   close (p[0]); 
   close (p[1]);
   close (p2[1]);
  execl ("./lire","./lire",NULL);
  j = 0;
 
    while ( read (p2[0], &c2, 1) != 0 ){ 
      texte2[j++] = c2;
    }
    close(p2[0]);
    texte2[j-1] = 0;
    printf("L'addition des deux nombre donne %s", texte2);
}
  else { // le pËre
    char texte[30]; 
    int i;
    close (p[1]);
    close (p2[0]); 
    i = 0;
    while ( read (p[0], &c, 1) != 0 ){
      texte[i++] = c; 
    }
    close(p[0]);
    texte[i-1] = 0;
   printf("les nombres sont %s", texte);
 
   dup2 (p2[1],1);
   close (p2[1]); 
   execl ("./calcul", "./calcul", texte); 
  }
}