> > Je cherche à écrire un producteur de contenu dans un fichier FIFO:
> > mkfifo decision
> >
> > #!/usr/bin/perl -Tw
> >
> > use FileHandle;
> >
> > my $fh = new FileHandle("decision", "w");
> >
> > sub value {
> > print "Evaluation !\n";
> > return 5;
> > }
> >
> > while (1) {
> > $fh->print(&value() . "\n\004");
> > }
> >
> > Lorsque je lance le processus, et que je fais 'cat decision', je m'attends
> > à ce qu'une seule ligne sorte et que 'cat' termine sur EOF (\004 mais
> > c'est peut-être une erreur ?).
> >
> > Actuellement ce code boucle à l'infini, 'cat' ne se termine jamais.
> Oui, \04 n'est le charactere d'eof que pour un terminal (a moins
> qu'on ne le change par un stty eof 'autre-character').
>
> Il faut fermer le handle coté perl pour que cat voie un eof.
C'est ce que j'ai fait mais ce n'est visiblement pas suffisant.
#!/usr/bin/perl -Tw
use FileHandle;
my $fh = new FileHandle();
while (1) {
$fh->open("decision", "w");
$fh->print("5\n");
$fh->close();
## sleep(1);
}
Maintenant cela donne un nombre de lignes aléatoires dans 'cat' !!!
yma ~/perl> cat decision | wc
286 286 572
yma ~/perl> cat decision | wc
461 461 922
yma ~/perl> cat decision | wc
127 127 254
yma ~/perl> cat decision | wc
143 143 286
En rajoutant 'sleep(1)', le résultat est juste mais ce n'est pas la réactivité
à laquelle je m'attendais... Est-ce que l'on peut mieux faire ? Et comment ?
Je pense à:
- un sleep qui serait de qq microsecondes ?
- un flush avant le close ?
- forcer le changement de contexte après le close ?