Tom: file-locking um konkurrierende Datei-Zugriffe zu regeln?

Beitrag lesen

Hello,

Das geht nur, wenn alle Prozesse dieselben Regeln berücksichtigen, am besten dasselbe "API-Script". Sonst benötigt man mandatory Locking.
Ja, das könnte man ja sicherstellen. "mandatory Locking" kann PHP ja nicht.

Da bin ich mir noch nicht endgültig sicher. PHP hat die "dio"-Funktionen und die sisn schon dicht dran. Aber wahrscheinlich wird das der Lockmode genauso gefiltert, wie im "normalen" C. Da muss man auch eine extra Extension laden, wenn man ihn benutzen will. Das bezieht sich jetzt auf die PC-OS-Konzepte, die an dieser Stelle alle ähnlich gestrickt sind.

Ja, aber wie mache ich das mit einem handle? Meinst Du hier das handle welches LOCK "beantragt" hat?

$fp = fopen ('test.txt','a+');   # a+ (ab+) , damit die Datei nicht
                                   # gelöscht wird und kein Handlewechsel
                                   # statttfinden muss
  $lock = flock($fp, LOCK_EX);     # hält das programm an dieser Stelle
                                   # solange an, bis LOCK erfolgreich
                                   # oder timeout
  $fseek($fp,0,SEEK_SET);          # Dateizeiger auf Anfang zurückstellen

$id = fread($fp,32);             # Datei auslesen
fseek($fp,0,SEEK_SET);           # Zeiger wieder auf Anfang stellen

ftruncate($fp,0);                # File leeren

fputs($fp, ++$id);               # File neu schreiben.

fclose($fp);

Geht so

Außerdem habe ich da noch Lösungsansätze auf der seite http://selfhtml.bitworks.de stehen. In dem Entwurf von "flat_box" ist auch eine Lockfunktion drin, die nicht-sperrend arbeitet und bisher keinerlei Fehler verursacht hat. man muss natürlich das Ergebnis auch auswerten.

Wenn ich die neue ID zurückschreiben will, muss ich den lock lösen, das handle schließen, und ein neues besorgen und erneut locken. Dazwichen kann ne Menge passieren. Oder gibt es da doch eine Möglichkeit mit nur einem handle? Bedenke dass ich z.B. 123 auslese, und am Ende soll 124 drin stehen.

Eben das darf man nicht machen. Ein aufgeben des Handles würde auch das Lock ungültig machen. man muss dabei zwischen den lokalen Handles des Prozesses und den zentralen Handles des OS untrscheiden.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau