kaepten: Dateihandling

hallo zusammen

Ich bin am Aufbau einer grösseren Sache mit Perl. Dazu nutze erstelle ich Files und ich lese bzw. durchsuche sie.

Frage:
Ich habe ein Script welches eine bestimmte Datei öffnet und liest. Wenn das Script läuft ist also die Datei für eine gewisse Zeit geöffnet. Was geschiegt nun, wenn just zur selben Zeit das Script nochmals gestartet (bevor das erste beendet wurde) wird und die gleiche Datei, die noch geöffnet ist, öffnen will?

Die gleiche Problematik habe ich natürlich auch, wenn ich eine Datei offen habe um einen neuen Inhalt zu schreiben, was geschieht dann?

kaepten

  1. hallo zusammen

    Ich bin am Aufbau einer grösseren Sache mit Perl. Dazu nutze erstelle ich Files und ich lese bzw. durchsuche sie.

    Frage:
    Ich habe ein Script welches eine bestimmte Datei öffnet und liest. Wenn das Script läuft ist also die Datei für eine gewisse Zeit geöffnet. Was geschiegt nun, wenn just zur selben Zeit das Script nochmals gestartet (bevor das erste beendet wurde) wird und die gleiche Datei, die noch geöffnet ist, öffnen will?

    Die gleiche Problematik habe ich natürlich auch, wenn ich eine Datei offen habe um einen neuen Inhalt zu schreiben, was geschieht dann?

    Also, wenn die Programme nur gleichzeitig lesen, dann geht alles klar. Nur wenn es an das Schreiben geht, dann kann einiges schief gehen. Dazu gibt es 2 Abhilfen:

    1. Flock. Damit kannst du es möglich machen, daß nur ein Programm gleichzeitig eine Datei geöffnet hat.

    2. Datenbanken. Die Übernemen die Koordination für dich.

    1. Vielen Dank für die Antwort!!

      1. Flock. Damit kannst du es möglich machen, daß nur ein Programm gleichzeitig eine Datei geöffnet hat.

      Ok ich mache flock FILE,2; für Exclusive. Aber was passiert mit dem zweiten Script? Wird das einfach abgebrochen und die Daten die ich ins File schreiben wollte gehen verloren? Was könnte ich für ein Sicherheitsmechanismus einbauen? Könnte ich eine Schleife bauen, die wartet mit in die Datei schreiben, bis die Datei wieder (durchs erste Script) geschlossen worden ist??
      Sagen wir das so: Das Scirpt wird von den Benutzern gestartet, deren Formulareingaben werden gespeichtert. Selbstverständlich möchte ich nicht, dass irgendwo Daten eines Besuchers verloren gehen, nur weil das besagte Script aktiv ist und von einem anderen Besucher gerade Daten ins File schreibt.

      1. Datenbanken. Die Übernemen die Koordination für dich.

      yep, das weiss, ich. Ist aber keine Alternative in meinem Fall. Derzeit zumindest nicht...

      cheers
      kaepten

      1. Vielen Dank für die Antwort!!

        1. Flock. Damit kannst du es möglich machen, daß nur ein Programm gleichzeitig eine Datei geöffnet hat.

        Ok ich mache flock FILE,2; für Exclusive. Aber was passiert mit dem zweiten Script? Wird das einfach abgebrochen und die Daten die ich ins File schreiben wollte gehen verloren? Was könnte ich für ein Sicherheitsmechanismus einbauen? Könnte ich eine Schleife bauen, die wartet mit in die Datei schreiben, bis die Datei wieder (durchs erste Script) geschlossen worden ist??
        Sagen wir das so: Das Scirpt wird von den Benutzern gestartet, deren Formulareingaben werden gespeichtert. Selbstverständlich möchte ich nicht, dass irgendwo Daten eines Besuchers verloren gehen, nur weil das besagte Script aktiv ist und von einem anderen Besucher gerade Daten ins File schreibt.

        Ne, das 2. Script wartet dann, bis der Lock wieder weg ist. Muß nur noch zum Anfang der Datei springen glaube ich. Ich glaube in perdoc -f flock sind nen paar schöne Beispiele.

  2. Hallo!

    Ich hatte diese Frage auch mal gestellt, dabei hat sich ein sehr interessanter Thread entwickelt wobei auch verschiedene Lösungen besprochen wurden.

    <../../sfarchiv/1999_2/t04506.htm>

    Gruß
    HaPe=Hansi