Datei vor doppeltem Zugriff schützen
Torwächter
- perl
Hallo zusammen,
gibt es noch einen anderen Befehl wie flock, der die Datei vor einem 2ten öffnen bzw. gleichzeitiges schreiben schützt ?
Vielleicht sogar zu einem sub weiter/umleitet.
Ich möchte flock nicht nehmen, da ich evtl. einen Windows-Server betreiben werde und die Scripte auch auf Windows teste.
Viele Grüße
Torwächter
Hi,
gibt es noch einen anderen Befehl wie flock, der die Datei vor einem 2ten öffnen bzw. gleichzeitiges schreiben schützt ?
Es gibt zwar keinen anderen Befehl (IMHO) aber ich habe diese
Lösung mal als sub in einem Script gesehen:
sub flock
{
local ($lock_file) = @_;
$lock_file = $fullpath.$lock_file;
local ($timeout);
$timeout=20;
while (-e $lock_file &&
(stat($lock_file))[9]+$timeout>time)
{ sleep(1);}
open LOCK_FILE, ">$lock_file"
or &error("Unable to create $lock_file");
}
sub unflock
{
local ($lock_file) = @_;
$lock_file = $fullpath.$lock_file;
close(LOCK_FILE);
unlink($lock_file);
}
Gruß,
Oli
Hi Oli,
while (-e $lock_file &&
(stat($lock_file))[9]+$timeout>time)
{ sleep(1);}
wir warten also so lange, bis die Datei fort ist ...
open LOCK_FILE, ">$lock_file"
or &error("Unable to create $lock_file");
}
... und danach legen wir sie an.
Dasselbe tun aber auch die vielen anderen Programme, die nun alle
fröhlich in dieselbe Datei schreiben.
Keiner von ihnen bekommt einen Error. Wieso auch?
"open" ist mitnichten eine atomare Operation (wäre sie es, dann
bräuchten wir ja überhaupt keine Synchronisierung mehr).
Eine Synchronisation eines Datei-Schreibzugriffs durch die Verwen-
dung eines Datei-Schreibzugriffs, das kann's irgendwie nicht wirk-
lich sein ...
Viele Grüße
Michael
Moin!
gibt es noch einen anderen Befehl wie flock, der die Datei vor einem 2ten öffnen bzw. gleichzeitiges schreiben schützt ?
Vielleicht sogar zu einem sub weiter/umleitet.
Ich möchte flock nicht nehmen, da ich evtl. einen Windows-Server betreiben werde und die Scripte auch auf Windows teste.
http://www.apache-asp.org/install.html
WinME / 98 / 95 flock() workaround
For those on desktop Windows operation systems, Apache::ASP v2.25 and later needs a special work around for the lack of flock() support on these systems. Please add this to your Apache httpd.conf to fix this problem after mod_perl is installed:
<Perl>
*CORE::GLOBAL::flock = sub { 1 };
</Perl>
PerlModule Apache::ASP
Please be sure to add this configuration before Apache::ASP is loaded via PerlModule, or a PerlRequire statement.
Das überschreibt scheinbar die Funktion mit einer neuen Subroutine, die einfach garnichts macht, außer "true" zurückzugeben.
Ansonsten: http://www.google.com/search?q=perl+flock+windows&sourceid=opera&num=0&ie=utf-8&oe=utf-8
- Sven Rautenberg