Cheatah: (ZU DIESEM FORUM) ein offenes Wort

Beitrag lesen

Hi,

(((PS: Frage an die Perl-Spezis: Das Vergeben der gleichen Postingnummer manchmal bei gleichzeitigen Abschicken liegt am Aufbau des Scripts, wenn ich das aus dem Archiv richtig entnehme?! Keine Kritik, nur mal eine Frage von jemanden, der sich damit nicht so dolle auskennt und es immer wieder amüsant findet, wenn es so aller paar Tage mal [je nach Traffic hier *g*] passiert ;-)

Beispielablauf:
Jemand postet einen Artikel. Das Script (Instanz A) liest nun eine Datei ein, in der die aktuelle Nummer steht. Diese wird um eins erhöht und als Artikelnummer verwendet.

Fast zeitgleich kommt ein zweiter Artikel. Instanz B des Scripts liest die (noch unveränderte) Nummer ein und verwendet sie für sich. Während nun als Instanz A die Datei schreibt, setzt Instanz B erst dazu an - und überschreibt die Datei anschließend. Hiernach schreiben beide Instanzen übrigens die erhöhte Nummer zurück in die Datei, aber das nützt nix mehr.

Zwischendrin haben natürlich beide Instanzen die Hauptdatei (korrekt) verändert, so daß beide Artikel scheinbar korrekt eingeordnet sind. Sie haben jedoch die selbe (versteckte) Nummer, welche bei Antworten auf den (einzigen der beiden) Artikel zur Auflistung des Antwortartikels führt. Dadurch gibt es dann "Dupes".

An Stefan:
Abhilfe wäre eine Dummy-Datei, welche vor dem Auslesen des Zählers geschrieben wird, nachdem vorher eine Prüfung auf Existenz negativ verlief. Diese Dummy-Datei wird nach dem Zurückschreiben des Zählers wieder gelöscht. Code (aus dem Gedächtnis, bei Bedarf teste ich es gerne für Dich aus):

my $i=0;
while (++$i<10 && -e "dummy-datei") { select(undef,undef,undef,0.1); }
open(DUMMY,">dummy-datei");
print DUMMY "1";
close(DUMMY);

Zähler lesen

...

Zähler schreiben

unlink("dummy-datei");

Für solche Dummy-Dateien nehme ich normalerweise den Original-Dateinamen und hänge ein ".flk" an. Hier wird übrigens nach einer Sekunde Prüfens davon ausgegangen, daß aus irgendwelchen Gründen die Datei fehlerhaft noch besteht und trotzdem geschrieben - also kein absoluter Schutz, jedoch habe ich mit einem entsprechenden Code in meinem eigenen Forum anschließend keinerlei Fehler mehr gehabt. Zugegebenermaßen habe ich auch kein so gut besuchtes Forum :-)

Cheatah