Thread flock funktioniert nicht
(64 answers)
Opened by x-man at 2006-04-17 19:11 Quote Ja das stimmt, da habe ich mit sysopen wohl etwas falsch verstanden. Es kann doch nicht flock()en. Quote Nein, dass stimmt nicht. Wenn du O_EXCL zusammen mit O_CREAT benutzt, dann wird eine Datei nur dann erzeugt, wenn sie noch nicht existiert. Und das bezieht sich auch auf Hard Links, nicht nur auf Symlinks. Ich habe das selber ausprobiert, und es kam bei einen Hardlink eine Fehlermeldung. Anhand dessen würde ich schon sagen das ein sysopen sicherer ist als ein reines open. Den mit open ist man nicht in der Lage so fein zu sagen, was man wirklich möchte. Ein (open, ">") legt eine neue Datei ein, wenn Sie existiert wird sie überschreiben. Sowas kann man mit sysopen regeln, dass das letzte eben nicht passiert. (Allerdings klappt sowas laut beschreibung nicht mit Netzlaufwerken wie z.B. NFS). Allerdings stimmt es das die Race Condition nur dann existiert wenn man ein Dateitest gefolgt von einem open macht. Mit flock() hat das doch nichts zu tun. Quote Code (perl): (dl
)
1 2 3 4 use Fcntl; sysopen FILE, "copy.txt", O_WRONLY|O_CREAT|O_EXCL or die "Datei existiert bereits: $! "; close FILE; Die Datei copy.txt war ein Hardlink auf eine andere Datei, es wurde bei mir erfolgreich "Datei existiert bereits: File exists" ausgegeben. Quote Das es sicherer ist würde ich immer noch behaupten. Allerdings stimmt es das es nichts mehr mit der Verwendung von flock() zu tun hat. Allerdings beschränkt sich der Sicherheitsvorteil nur darin, wenn man z.B. folgendes haben möchte: - Datei zum Schreiben öffnen, neue Datei erzeugen, Datei darf noch nicht existieren - Datei öffen zum Anhängen, Datei muss existieren - Datei öffnen für Aktualisierungen, Datei darf noch nicht existieren - Datei öffnen für Aktualisierungen, Datei ggf. erzeugen Mit "Aktualisierung" ist gemeint gleichzeitiges Lesen/Schreiben. Wenn man sowas nicht benötigt, hat sysopen sicherlich auch keine Sicherheitsvorteile.\n\n <!--EDIT|sid burn|1145803598--> Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
|