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";
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";
Aggiungi un commento