Hallo Christoph,
Auf einem Einzelrechner ist das auch kaum nachvollziehbar. Rufe mal dein Script über zwei verschiedene virtuelle hosts gleichzeitig auf, oder wenn du kannst, gleichzeitig über zwei oder mehrere Netzwerkrechner. Du könntest auch mal in SELFHTML nachlesen.
es ist ganz egal, von wo aus auf die Datei zugegriffen wird, da
jeder Prozess, egal von wo aus er auf die Datei zugreift, eine
eigene Zeile besitzt, in der er registriert ist. Nur auf diese
eine Zeile greift er zu. Nur diese eine Zeile wird von ihm
bearbeitet.
use Fcntl qw(:DEFAULT :flock);
Hier hast du zwar das richtige Modul angesprochen, aber im Script passiert dann nichts.
Natürlich passiert was. Mittels sysopen wird die Datei ./testdatei
im Lese- und Schreibmodus mit O_RDWR geöffnet.Das war nicht gemeint. Du hast kein LOCK im Script stehen.
Das muss ich doch auch nicht. Ohne den Lockmechanismus machen
open und sysopen eigentlich das Gleiche.
open sysopen
---------------------------------------------
< O_RDONLY
> O_WRONLY | O_TRUNC | O_CREAT
>> O_WRONLY | O_APPEND
Jede der beiden Funktionen kann etwas, was die andere nicht kann.
Ich bevorzuge die "Features" von sysopen.
Der Lockmechanismus kann nur einwandfrei funktionieren, wenn ich ihn
in all meinen Perlskripts einsetze.Das verstehe ich nicht. Spielt aber keine Rolle.
Aber ich erkläre es dir gerne. Was nützt es, in einem Perlskript
eine Datei mit
sysopen(FILE,$file,O_RDWR);
flock(FILE,LOCK_EX);
zu öffnen, wenn ich in einem anderen Perlkript auf die gleiche Datei
mittels
open(FILE,'>>',$file);
zugreife. open interessiert es nicht, ob die Datei gelockt ist.
Aus diesem Grund nutze ich in meiner gesamten Umgebung den flock-
Mechanismus. Nur so kann ich sicherstellen, das sich keine Skripts
in den Weg kommen.
Und das ich sysopen statt open in meinem Beispiel eingesetzt habe
liegt einfach daran, weil ich immer sysopen statt open nutze.
Ich kann mir aber noch immer nicht vorstellen, weshalb sich mehrere
Prozesse, die alle eine andere Zeile bearbeiten, in die Quere kommen
sollten.
Greez,
opi
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|