Denise Home Page
Miscellaneous per tutto quello che riguarda la creazione e la programmazione di pagine web
Perl: forzare il flush
Inserito il 01/12/2009 Ore:10:50:39 Visite: 88 Commenti: 1
Mi è capitato di scrivere un programmino stupido che scriva ogni secondo una riga di un ipotetico file di log:

cat generate.log;

#!/usr/bin/perl
print "Inizio\n";
open (LOGFILE, '>> mylog.log') or die "Can't open log: $!";
select LOGFILE;
while(1){
print LOGFILE "Scrivo log ... \n";
sleep(1);
}
print "Esco";


avviandolo indirizzando l'output su un file denominato miolog.log, non si vedrà mai il contenuto del log crescere. Il file verrà creato ma rimarrà vuoto. Questo perchè si crea un buffer di scrittura e per forzare la scrittura su file bisogna inserire nel codice questa istruzione: "$| = 1;", in questo modo vedrete il log crescere ogni secondo. Il codice corretto risulta quindi:


cat generate.log;

#!/usr/bin/perl
print "Inizio\n";
open (LOGFILE, '>> mylog.log') or die "Can't open log: $!";
select LOGFILE;
$| = 1;
while(1){
print LOGFILE "Scrivo log ... \n";
sleep(1);
}
print "Esco";




Autore:

Commento:


elisavr
Deniiiiiise.... non riesco più a collegarmi al tuo bellissimi sito delle diete... qual è il link diretto??? Grazei, Elisa (bacarospola@libero.it)

Scritto il 07/01/2010 alle 11:11