Moin,
Unix-Systeme sind nicht so schlecht wie Windows-Systeme.
den Satz streichen wir bitte. Ich bin auch kein Microsoft(-Windows)-Fan, aber bei einer sachlichen Diskussion sollte diese Art der Polemik draußen bleiben.
Naja, es ärgert mich bloß ab und zu mal, dass ich eine Datei nicht umbenennen darf, bloß weil irgendwo irgendein Prozess sie zum Lesen geöffnet hat. Das hat mich mehrfach gebissen als ich beim Aufräumen meiner MP3s den Namen einer Datei korrigieren wollte, während ich sie gehört habe.
Das ist eine Frage der Voreinstellung des "extended Filemode". Die normalen Filemodes lauten w, w+, r, r+, a, a+ ...
Öhm, was meinst du? man 2 open schweigt sich dazu aus.
Interessant ist nun noch der Versuch, ob die Daten im Handle kopiert werden, oder ob nur die Handlereferenz an den Prozess weitergegeben wird. Im zweiten Falle könntest Du, während eine Applikation schon ein Handle auf die Datei besitzt, von einem anderewn Prozess aus die Zugriffsrechte ändern (das ist "nur" namnesbasiert, dafür braucht man kein Handle) und es hätte Auswirkungen auf den ersten Prozess.
Öhm? Die Zugriffsrechte auf die Datei werden beim so weit ich weiß beim Öffnen überprüft, danach kannst du auch mit denen anstellen was du willst.
Vom Handle auf den Dateinamen schließen? Das muss möglich sein, zumindest auf der Systemebene.
Ich bezog mich da auf eine Anmerkung in der Doku zur glibc die ich vor langer, langer Zeit mal gelesen habe: "You can't read the address of a socket in the file namespace. This is consistent with the rest of the system; in general, there's no way to find a file's name from a descriptor for that file." (http://www.gnu.org/manual/glibc-2.2.5/html_node/Reading-Address.html).
In der Handle-Tabelle wird der Name der Datei eingetragen. So wird sie nämlich mit dem Handle verbunden. Wenn man also die lage der Handle-Tabelle im Speicher kennt, kann man si natürlich auslesen. Voraussetzung, man het ein gültiges Gate auf den Speicherbereich (Local Desriptor). Sonst klopft einem das OS auf die Finger. Wir arbeiten ja schließlich im protected meode (PCs).
Das riecht sehr DOSig (wie auch der Begriff des Interrupts ;). Unter Linux gibt es noch das /proc-Dateisystem das für jeden offenen Dateideskriptor einen Symlink auf die Datei hat. Damit scheint die Rückwärtsauflösung möglich zu sein, aber das dürfte noch unportabler als mandatory locking sein.
Mit diesem Abschnitt werde ich mich noch beschäftigen. Hast Du einen Link zur Linux-API? Ich würde mich gerne mal mit den System- und Netzwerkinterrupts auseinandersetzen. Eigentlich kann man erst danach mehr sagen zum Thema Locking.
Ich glaube das was du meinst heisst unter Linux Systemcall und müsste auf so ziemlich jedem System in Kapitel 2 der man-pages ausführlich beschrieben sein. Falls du grade kein Linux zur Hand hast, kannst du auch einfach Google befragen, zum Beispiel nach man open(2).
Jedenfalls hast Du bestätigt, dass es in PHP um "advisory Locking" geht. Also Quasi nur eine Verkehrsregel. man kann sie beachten oder auch nicht...
Eben. Wenn man was anderes machen will, wird das etwas aufwändiger.
--
Henryk Plötz
Grüße aus Berlin