[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