Bonjour,
J'ai une méthode qui s'appelle yylex(); que je ne peux pas modifier mais que je peux l'appeler. Elle ne prend aucun argument et ne renvoie rien. Je ne comprend pas trop le code de cette méthode. Mais, elle attend sur son entrée standard à l'infini une chaîne de caractère pour la transformer en une autre chaîne de caractère, puis elle affiche sur sa sortie standard la nouvelle chaine grâce à un fputs(chaine, stdout).
J'aimerais pouvoir lui envoyer une chaine de caractère et récupérer la nouvelle chaine dans mon code C.
Pour cela, j'ai fait appelle aux pipe() et au fork().
Mais, cela ne fonctionne pas. Rien ne s'affiche
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 int main(int argc,char * argv[]) { int bufsiz = 256; int pfdchildparent[2]; int pfdparentchild[2]; pipe(pfdchildparent); pipe(pfdparentchild); int pid = fork(); char * buffer = malloc(bufsiz * sizeof(char)); if (pid == 0) {//père close(pfdchildparent[0]); close(pfdparentchild[1]); dup2(pfdparentchild[0], 0); close(pfdparentchild[0]); /* close the pipe */ write(pfdchildparent[1], "chaine de caractère\n", strlen("chaine de caractère\n")); close(pfdchildparent[1]); while (read(0, buffer, bufsiz) != 0) printf("pere reads %s", buffer); close(1); close(0); } else { //fils close(pfdchildparent[1]); dup2(pfdchildparent[0], 0); close(pfdchildparent[0]); close(pfdparentchild[0]); dup2(pfdparentchild[1], 1); close(pfdparentchild[1]); yylex(); close(1); close(0); } return 0; }
Est ce que fputs("chaine", stdout); et write(0, "chaine", strlen("chaine")); font exactement la même chose ?!
car la méthode yylex() utilise stdin et stdout. Je ne sais pas ce que c'est car elles ne sont pas initialiser dans le code. Mais j'ai supposé que stdin = 1 et stdout = 0 ...
Normalement, si j'ai bien compris, que l'on fasse un printf ou un write(1, ...). Cela devrait mettre la chaine sur la sortie standard c'est à dire sur l'écran ?
Partager