[perl] escritura de archivos dentro de ciclos while infinitos

<Rodrigo Gallardo lrgallardo@abl.com.mx
Thu, 25 Jan 2001 16:16:24 -0600 (CST)


Bolo Lacertus writes:
 > Saludos!
 > 
 > La mayoría de los UNIX usan buffers de escritura para archivos, hay por
 > ahi una función de "flush" para solicitar que se vacíen esos buffers
 > pero por el momento no recuerdo cual es.
 > 
 > El problema de tu programa podría ser que no este sacando los letreros a
 > tiempo para que los veas y terminas el programa antes de que se llenen
 > los buffers y se realicen las escrituras.
 > 
 > Una forma sencilla de evitar esto, que es práctica para programas que
 > pasan la mayor parte del tiempo esperando el siguiente momento de
 > actividad es abrir y cerrar el archivo por cada ciclo (esto
 > necesariamente vacía los buffers).
 > 
 > "Von Eckenbrecher, Alejandro" wrote:
 > > #!/usr/local/bin/perl
 > > 
 > > open mal,"> estadoth.dat";
 > > open log1,">> cambioth.log";
 > > while (1){
 > > sleep (10);
 > > print mal "prueba \n";
 > > print log1 "prueba1\n";
 > > }
 > 
 > 
 > tu programa quedaría:
 > #!/usr/local/bin/perl
 > while (1){
 >   open mal,"> estadoth.dat";
 >   open log1,">> cambioth.log";
 >   print mal "prueba \n";
 >   print log1 "prueba1\n";
 >   close(mal);
 >   close(log1);
 >   sleep (10);
 > }
 > 
 > 
 > Desperdicia tiempo de procesador, pero este tipo de programas no suelen
 > tener eso como una preocupación primordial.
 > 
Abrir y cerrar los archivos cada vez desperdicia más que tiempo de
procesador. Tambien causa que el archivo sea escrito a disco cada vez,
y que cada que lo abres se tenga que resolver de nuevo el nombre,
buscar el inodo, leer el bloque ... Además recuerda que estamos en un
sistema multiusuario, y que si a ti no te importa desperdiciar el
procesador y el disco, a otros quizá si.

Lo mejor es hacer lo que dice José Antonio, $| = 1. Como para usar
esto necesitas seleccionar el filehandle activo y otras monerias, te
recomiendo le heches un ojo a IO::Handle y a su función autoflush.

-- 
Rodrigo
--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : unsubscribe perl