Anfänger: wenn beim sperren einer Datei das Programm abstürzt

Hallo zusammen,

ich möchte verhindern, daß mehrere Leute gleichzeitig schreibend auf eine Datei zugreifen können. Da gibt es ja mehrere Möglichkeiten. Wie kann ich aber verhindern, daß meine Datei gesperrt bleibt, wenn mein Programm nach Setzen der Sperre, oder Umbenennen der Datei abstürzt? Ich bin noch Windowd Nutzer, und kann mir nicht so richtig vorstellen, daß Betriebssysteme nicht abstürzen  :).

Danke für eure Anregungen
Andreas

  1. Hallo Andreas,

    In Perl gibt's die Möglichkeit, festzulegen, was unbeding am Anfang und am Ende des Scripts aufgerufen werden soll.
    Dies erfolgt mit den BEGIN- bzw. END-Blöcken. BEGIN wird
    Genaueres steht in der Doku (perlmod).
    Natürlich hilft das alles nichts, wenn beispielsweise die Maschine ausgeschaltet wird ;-)

    Nun zu Deinem konkreten Problem: (Vorschlag)

    #!/usr/bin/perl -w
    use strict;
    use Fcntl ':flock'; # import LOCK_* constants
    my($islocked);
    [...]
    flock(FILEHANDLE,LOCK_EX);
    $islocked = 1; # merken wir uns, daß wir den File gelockt haben.
    [...]

    END
    {
    flock(FILEHANDLE,LOCK_UN) if islocked == 1;
    }

    Da fehlt sicherlich noch einiges, aber ich glaube das Prinzip wird klar.

    Grüße
    Klaus

    1. END
      {
      flock(FILEHANDLE,LOCK_UN) if islocked == 1;
      }

      Das solltest man in der Regel besser sein lassen. Ein close impliziert einen unlock. Daher ist letzterer unnoetig. Schaedlich ist er, wenn kein buffer flush ausgefuehrt wurde. Dann ist naemlich nicht sichergestellt, dass zum Zeitpunkt des unlock wirklich alle Daten geschrieben sind.

      Peter

      1. Hallo Peter,

        Das solltest man in der Regel besser sein lassen. Ein close impliziert einen unlock. Daher ist letzterer unnoetig. Schaedlich ist er, wenn kein buffer flush ausgefuehrt wurde. Dann ist naemlich nicht sichergestellt, dass zum Zeitpunkt des unlock wirklich alle Daten geschrieben sind.

        Man lernt nie aus! Du hast recht, unlocking ist nicht notwendig. Es vergeht kein Tag, an dem ich nicht wieder auf duchdachte Ideen in Perl draufkomme, obwohl ich schon einige Zeit damit arbeite.

        Danke
        Klaus

        1. Ich danke

          gruß
          Andreas