Jeg har en fil hvori der skal slettes nogle få linjer og indholdet af
filen skal bruges til vidre behandling. Da der bliver skrevet til
filen fra en del forskellige processer vil jeg gerne låse filen.
Hvis det skal foregå 100% korrekt, hvordan gør man så?
Jeg har følgende stykke kode:
#!perl
use Fcntl qw(:flock :seek);
# Finder den rigtige fil...
my @fil;
open FH, '+<', $fil;
flock FH, LOCK_EX;
while (<FH>) {
push @fil, $_ unless /blablabla/;
}
seek FH, 0, SEEK_SET;
print FH @fil;
flock FH, LOCK_UN;
close FH;
# Mere behandling af dataene i @fil;
__END__
Men er der ikke en teoretisk chance for at der er nogen der begynder
at pille i filen mellem at det andet kald til flock slipper filen og
kaldet til close sørger for at flushe filhandlet?
Ignorere folk denne mikroskopiske risiko eller sætter folk $| til 1?
Eller er der slet ingen risiko da close selv fjerner låsen?
--
Peter Makholm | We constantly have to keep in mind why natural
peter@makholm.net | languages are good at what they're good at. And to
http://hacking.dk | never forget that Perl is a human language first,
| and a computer language second