Flush ... - Perl - Programmation
Marsh Posté le 02-07-2004 à 21:27:18
meme si tu met l'autofluch ya tout de meme une petite bufferisation du system, mais pas grand chose normalement...
pour mettre un fd en autoflush tu dois faire comme ca:
Code :
|
ou en une ligne (et sans variable temporaire):
Code :
|
et normalement ca marche...
Marsh Posté le 04-07-2004 à 02:15:03
Ce n'est pas parce que ce n'est pas bufferisé au niveau de Perl que ce n'est pas bufferisé plus bas. Tout n'est pas écrit physiquement sur le disque dés que tu écris dans un fichier.
Marsh Posté le 04-07-2004 à 20:39:24
tout d'abord merci pour vos réponses.
pospos > ce que tu a ecrit correspond a ce que j'ai dis. juste que tu reselectionne le descripteur précédent
matafan > ok, n'y a t'il donc pas de moyen d'écrire physiquement a chaque acces, ou de déclencher l'écriture physique a certain moment ?
Merci !
Marsh Posté le 04-07-2004 à 22:31:50
oui effectivement ton truc devrait marcher aussi, mais si tu ne reselectionne pas ton fd par defaut (STDOUT) tu risque qq problemes.
essai de voir combien de donners doivent etre ecrite avant que ca flush pour de bon.
Il me semble qu'on peut desactiver le cache de l'OS (mais c'est pas ideal poru els perfs...) mais il restera celui du disque dur (qu'on peut d'ailleurs peut etre aussi desactiver? je sais pas).
enfin bon j'ai jamais eu ce genre de prob. Il fait combien de cache de ton disque dur?
Marsh Posté le 05-07-2004 à 08:26:09
Je ne connais pas les details techniques precisement. Je tourne sous Solaris (SunBlade).
Je reselectionne evidemment STDOUT par la suite
( select (STDOUT); )
vraiment, c'est exasperant...
Marsh Posté le 05-07-2004 à 10:54:50
essai peut etre un truc genre truncate à la taille actuelle du fichier, ou peut etre un syseek, et ca fera peut etre fulsher l'OS
Marsh Posté le 10-08-2004 à 22:32:05
si tu as toujorus le probleme, tu peux tenter ca:
use IO::Handle;
IO::Handle::sync(LOG);
ca fait un fsync
Marsh Posté le 02-07-2004 à 16:48:31
Bonjour !
J'ai un leger probleme, je m'explique.
J'ai un script perl qui commence a etre consequent. J'ecrit tout au cours de l'execution du script dans divers fichiers de LOG ainsi que dans un fichier report ecrit en html.
Je souhaite que l'ecriture dans ce fichier soit non bufferiser. J'ai verifier dans la documentation perl ou j'ai pu lire qu'il suffit d'activer l'autoflush sur le descripteur de fichier.
J'ai donc un descripteur LOG et j'utilise :
select LOG; $| =1;
et rien a faire. tout s'ecrit uniquement lorsque le script est stoppe.
Une idee ?
( apparemment $| devrait etre a 0 par defaut, ce qui n'est pas le cas chez moi .., source : http://www.bribes.org/perl/docfr/p [...] #LFFBFBDDA )