Guten Morgen,
Ich habe da ein beispiel an dem ich zur zeit nicht weiter komm.
Ich finde flock eine gute methode um daten zu schützen bevor sie von einem zweiten zugriff
benutzt werden,aber in meinem beispiel geht das wahrscheinlich nicht so
wie ich das will.
Ich möchte eine datei einlesen und beschreiben ohne dass der alte inhalt gelöscht wird
und diese datei sollte solange von anderen zugriffen geschützt sein bis
das einlesen sowie das geschriebene abgeschlossen ist.
Hier ist das beispiel:
sub check
{
use Fcntl ':flock'; #hier wird eingelesen ob das zu schreibende schon vorhanden ist
$Zugriffe = 0;
open(DATEN,"<$logfile") || &Dead('Cannot open file');
flock(DATEN,LOCK_EX);
while (<DATEN>){
/$etwas_geschriebenes/ ? $Zugriffe = $Zugriffe + 1 : $Zugriffe = $Zugriffe;
}
if ($Zugriffe >= 1) #wenn es vorhanden ist
{
&Dead(); #dann verlasse den weiteren vorgang
}
else
{
close (DATEN);
##hier ist das problem,wo ein zweiter zugriff der die daten wieder einliest,
den weiteren vorgang stören könnte bzw. die daten dann nochmals schreibt,
weil er in dem moment bevor er die daten schreibt ja schon einliest
und nicht weiss dass die daten bereits geschrieben wurden.##
open(DATEN,">>$logfile") || &Dead('Cannot open file'); #ansonsten schreibe den text in die log
flock(DATEN,LOCK_EX);
print DATEN "$etwas_geschriebenes\n";
close (DATEN);
&email();
}
}
------------
Das problem hatte ich als jemand in einer sekunde zweimal das script aufgerufen hatte.
Vielleicht gehts ja so,denn das script ist nun so (wie es oben steht abgeändert worden).
Oder weiss jemand eine bessere idee?
Grüsse
Alain