Thread flock funktioniert nicht
(64 answers)
Opened by x-man at 2006-04-17 19:11
Du hast recht. Das mit dem O_CREAT|O_EXCL hatte ich in der Manpage falsch verstanden, es bricht grundsätzlich ab, wenn die Datei schon existiert oder ein Symlink ist.
Wie du schon sagst, hat man bei sysopen() die feinere Auswahl, vor allem, wenn man existierende Dateien explizit nicht überschreiben möchte. Das kann man mit open() nicht atomar lösen. Wenn man aber die Funktion "neu anlegen oder überschreiben" haben möchte, wie sie ein "open FOO, '>', $dateiname" oder "open FOO, '>>', $dateiname" erledigen, dann ist man auch mit sysopen() nicht vor Symlink-Angriffen sicher, denn ein Test auf einen Symlink müsste sowohl bei sysopen() als auch bei open() vorher erfolgen, wäre somit wieder nicht atomar. Ansonsten ist der letzte Punkt in deiner Liste vielleicht die häufigste Anwendung, die man nicht gut mit open() lösen kann: Lesen, schreiben und evtl. anlegen (O_RDWR|O_CREAT) in Kombination mit Locking. Das findet man dann auch in perldoc -q "get locking". |