Flux d'entrée et de sortie
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().
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 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;
} |
Mais, cela ne fonctionne pas. Rien ne s'affiche
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 ?