Jemand zu Hause?Leser: 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#!/usr/bin/perl -w use strict; use warnings; use IO::Handle; STDOUT -> autoflush (1); use Fcntl qw(:DEFAULT :flock); my $log = 'testrw_log.txt'; if (sysopen (my $file,$log,O_WRONLY|O_TRUNC|O_CREAT)) { $file -> autoflush (1); my $z = 0; while (1==1) { $z ++; print $file "Test $z\n"; print STDOUT "Habe Zeile $z geschrieben\n"; sleep 1; } } else { print "Fehler $!\n"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/perl -w use strict; use warnings; use IO::Handle; STDOUT -> autoflush (1); use Fcntl qw(:DEFAULT :flock); my $log = 'testrw_log.txt'; my $lzeile = 0; # dieser Wert wird vom Client JS/Ajax mitgebracht while (1==1) { if (sysopen (my $file,$log,O_RDONLY)) { my @zeilen = <$file>; close ($file); if (scalar @zeilen > $lzeile) { print "Neu:\n" . join ("",@zeilen[$lzeile..scalar @zeilen - 1]) . "\n"; $lzeile = scalar @zeilen; # an dieser Stelle wird dem Client der aktuelle Text sowie die letzte Nummer $lzeile übergeben } else { print "nichts neues, warte...\n"; } } else { print "Fehler $!\n"; } sleep 1; }
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1 2 3 4 5 6 7 8
sysopen(my $fh, ...); if(flock($fh,LOCK_EX|LOCK_NB)) { print $fh ...; $fh->flush; flock($fh,LOCK_UN); } close($fh);
2010-12-07T06:17:50 biancaEin weiterer Schreibprozess wird zwar abgehalten, soweit so gut. Der Leseprozess darf jetzt aber auch nicht mehr dran.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-12-07T08:24:54 pqsolltest du das nächste mal vielleicht einfach dazuschreiben, dass du einen ungewöhnlich langen schreibprozess hast.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-12-07T09:23:50 pqdu kannst die datei geöffnet halten, aber nur zum eigentlichen schreiben locken.
wenn der schreibprozess also kontinuierlich läuft, kann der filehandle offen bleiben, aber nur beim schreiben einer zeile machst du vorher ein flock und danach gibst du den lock mit LOCK_UN wieder frei.
2010-12-07T09:12:04 biancasiehe mein Beispiel, da geht das ja draus hervor.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem