Siechfred: Probleme mit dem Readbuffer beim lesen von Dateien

Beitrag lesen

Tag Dieter.

ich habe mir ein mit Perl eine Besucherauswertung geschrieben. [...] Sobald jedoch mehrere Besucher zeitgleich zugreifen (kann nicht genau sagen wieviel) und die Datei schon etwas größer ist wird öffters die Datei zerstört und neu angefangen.

Das hört sich in der Tat nach einem Locking-Problem an.

Ich dachte das Perl Rücksicht nimmt falls die Datei gerade von einem anderen Prozeß benutzt wird.

Nein, Perl nimmt keine Rücksicht, du kannst mit Hilfe von Perl nur das System *bitten* Rücksicht zu nehmen. Hilfe dabei erhältst du durch das Modul Fcntl. Du musst dir das wie eine Garageneinfahrt vorstellen, die nur eine Spur hat: Flocken bedeutet nichts anderes, als die Ampel an der Einfahrt zu schalten, die Prozesse sind die Autos, die rein und raus wollen. Dabei gibt es drei Möglichkeiten:

LOCK_EX: Ampel auf Rot, keiner darf rein
LOCK_SH: Ampel auf Gelb, Achtung, Vorsicht bei der Einfahrt, es könnte einem jemand entgegenkommen
LOCK_UN: Ampel auf Grün, Einfahrt gestattet

Allerdings gibt es wie überall Verkehrssünder, die sich über Ampelregelungen hinwegsetzen, zu diesem Zweck gibt es noch die Konstante LOCK_NB. Von LOCK_SH solltest du bei schreibenden Operationen die Finger lassen, da kommt meistens nur Unsinn heraus. Du musst also LOCK_EX nehmen. Einen eleganten Weg des Lockings bietet dir noch das Modul File::NFSLock (das ich selber noch nicht benutzt habe, Fcntl hat bisher ausgereicht), eine Anleitung zum sicheren Öffnen von Dateien findest du auf Programmieren mit CPAN-Modulen.

Siechfred