Ergebnis 1 bis 8 von 8
Thema: Datei lesen während des Schreibens verhindern? Ich bastele gerade an einem Problem herum, bei dem 2 Clients über einen Apache Server unter Linux Daten per XML ...
  1. #1
    Außer Betrieb Avatar von QuHno
    Registriert seit
    15.05.02
    Ort
    "Provinz voll Leben"
    Beiträge
    8.745

    Datei lesen während des Schreibens verhindern?

    Ich bastele gerade an einem Problem herum, bei dem 2 Clients über einen Apache Server unter Linux Daten per XML Bröckchen austauschen sollen.

    Nun ergibt sich das Problem, dass es äußerst ungut wäre, wenn die Datei gerade für einen Client per fopen("pfad", "w+") geöffnet wird, während sie in der 2. Session per fopen("pfad", "r") geöffnet wird, da ja die Datei beim w+ erst einmal auf 0 gesetzt wird, was in meinem speziellen Fall sehr ungut wäre...

    r+ ist keine Lösung, da die vorherigen Informationen beim schreiben ungültig sind. Soweit ich weiß, "lockt" Linux genau wie alle anderen mir bekannten Systeme leider nicht gegen Lesevorgänge während des schreibens.

    Da die Clients den Lesevorgang selbst starten und die einzelnen PHP Sessions ja nichts voneinander wissen (oder gibt es da eine Message Queue, von der ich noch nichts weiß?) kann es zu Kollisionen kommen bei denen der lesende Client evtl. nur Müll bekommt und nicht die Daten, die er eigentlich haben soll.

    Wie kann ich dieses Problem umschiffen?

  2.   Anzeige

     
  3. #2
    Der alte Schwede Avatar von SoKoBaN
    Registriert seit
    17.06.03
    Ort
    im Loch
    Beiträge
    4.150

    AW: Datei lesen während des Schreibens verhindern?

    Und wenn du die Datei für den jeweiligen Vorgang in ein temporäres Verzeichniss verschiebst und erst nach Ende des Vorgangs zurück schiebst?

  4. #3
    Außer Betrieb Avatar von QuHno
    Registriert seit
    15.05.02
    Ort
    "Provinz voll Leben"
    Beiträge
    8.745

    AW: Datei lesen während des Schreibens verhindern?

    Mal naiv gefragt: Entspricht das schieben nicht einem schreiben?

    Ich hatte auch an einen rename gedacht, bei dem ich die Datei unter einem anderen Namen speichern ließe und dann zu der eigentlichen umbenenne, wenn der Schreibvorgang abgeschlossen ist, wenn ich nur wüsste, wie man die Fehlermeldung, dass eine Datei gleichen Namens schon existiert, beim Umbenennen per PHP nach dev/null schickt (oder so) unter C würde man ja einfach den alten Filepointer vernichten...

    Die einzige Bedingung ist, dass der lesende Client immer eine Datei, aber niemals eine Müll Datei erhält. Ein halbes oder ganzes Sekündchen veraltet dürfte sie aber schon sein ...

    PS: Ich kenne mich mit den Linux Mechanismen nicht so genau aus, bitte erklär's mir ganz einfach

  5. #4
    gehört zum Inventar Avatar von duffguy
    Registriert seit
    07.09.07
    Beiträge
    698

    AW: Datei lesen während des Schreibens verhindern?

    Kurz vor dem Schreiben erstellst Du eine (leere) Flag-Datei, welche Du nach
    erfolgtem Schreibvorgang wieder löscht.

    Die Routine, welche liest, überprüft ob die Flag-Datei existiert, und fährt erst
    dann weiter, wenn keine Flag-Datei mehr existiert.

    ot:

    Wie man das mit PHP coded, weisst Du sicher besser als ich. (Ich kann kein PHP).



    hth

  6. #5
    Der alte Schwede Avatar von SoKoBaN
    Registriert seit
    17.06.03
    Ort
    im Loch
    Beiträge
    4.150

    AW: Datei lesen während des Schreibens verhindern?

    Um eine Fehlermeldung garnicht erst auszugeben, stelle er ein @ vor den Befehl.
    Egal welche Ausgabe kommen würde, es kommt keine.

    So ganz verstehe ich dein Problem ja nicht. Meinst du, das du in jedem Fall vermeiden willst, das eine Datei während des Schreibvorganges gelesen werden kann? Die Datei also erst lesbar sein soll, wenn sie fertig geschrieben ist? Normal ist der Fall, das das auftritt ja extrem gering.
    Ich würde das so lösen, das ich ans Ende einer jeden Datei einen Kommentar schreiben lassen würde. Wenn nun der Client die Datei zum lesen öffnen will, lässt du vorher prüfen, ob dieser Kommentar in der Datei enthalten ist. Ist das der Fall, kann die Datei ausgeliefert werden. Ist der Kommentar nicht vorhanden, wird die Datei gerade geschrieben und der Ausgabevorgang wird abgebrochen.

  7. #6
    Außer Betrieb Avatar von QuHno
    Registriert seit
    15.05.02
    Ort
    "Provinz voll Leben"
    Beiträge
    8.745

    AW: Datei lesen während des Schreibens verhindern?

    @duffguy: Das würde bedeuten, dass der Client, der lesen will, immer erst die Flag Datei abfragen müsste und dann lesen. Das sind, je nach Verbindung diverse Millisekunden, in denen der andere Client Zeit hat, die eigentliche Datei zum schreiben zu öffnen und damit zu Nullen...


    Mir wäre es ja am liebsten, wenn man einfach den Filepointer von a nach b schieben könnte (geht das evtl? So tief bin ich in PHP und Dateisystemsachen auch noch nicht drin), dann hätte man alle Zeit der Welt, zu schreiben...

    edit: @Sokobahn: Gute Idee! Das werde ich versuchen

    edit2: Es funktioniert!
    Geändert von QuHno (09.03.09 um 21:13 Uhr)

  8. #7
    fühlt sich hier wohl
    Registriert seit
    30.12.05
    Beiträge
    84

    AW: Datei lesen während des Schreibens verhindern?

    Hast du dir schon einmal die Funktion flock() angesehen?

  9. #8
    Außer Betrieb Avatar von QuHno
    Registriert seit
    15.05.02
    Ort
    "Provinz voll Leben"
    Beiträge
    8.745

    AW: Datei lesen während des Schreibens verhindern?

    Ja, aber die lockt nicht auf jedem Dateisystem zuverlässig gegen lese Vorgänge, siehe Warnung im PHP-Manual, und ich weiß nicht genug über das Dateisystem auf dem Server - ist nämlich nicht meiner und auch kein Win

    SoKos Lösung hat aber noch einen Vorteil: Wenn sich die Daten in der Zwischenzeit nicht geändert haben, muss ich sie auch nicht verschicken, sondern kann eine "Nicht geändert" Meldung raushauen, das hält den Traffic klein

Ähnliche Themen

  1. PC friert während des Bootens ein
    Von supergoku im Forum Allgemeine Computerfragen
    Antworten: 14
    Letzter Beitrag: 26.12.08, 22:40
  2. Download während des Spiels
    Von Luftwunder im Forum Trackmania [SRC] - Forum
    Antworten: 6
    Letzter Beitrag: 18.09.08, 12:26
  3. Aussetzer während des Fahrens
    Von Nihamavasa im Forum Trackmania [SRC] - Forum
    Antworten: 11
    Letzter Beitrag: 02.02.08, 19:29
  4. bin-datei lesen
    Von Unregistriert im Forum Allgemeine Computerfragen
    Antworten: 9
    Letzter Beitrag: 23.08.05, 12:25
  5. Anfeuern während des Racing
    Von Gamma-Ray im Forum Comedy & Spiele
    Antworten: 7
    Letzter Beitrag: 15.09.04, 23:30

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Content Relevant URLs by vBSEO 3.6.1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53