Ich habe die 1. Ausgabe des Buches The Unix Programming Environment. In Kapitel 2 geben die Autoren an, dass Verzeichnisse als Dateien lesbar sind, und erwähnen einige Fakten zum Format dieser Dateien. Sie geben einige Anwendungsbeispiele wie cat .
(in Übung 2-2).
Zumindest in Darwin sind Verzeichnisse nicht mehr als Dateien lesbar. Zumindest scheinen sie beim Lesen keine Länge zu haben.
Wann ist diese Änderung eingetreten, und gibt es eine offizielle Dokumentation darüber?
files
filesystems
directory
Tyler
quelle
quelle
cat .
während dies unter Solaris 11 (wie unter Linux) nicht möglich ist. Cool.Antworten:
Die Fehlernummernreferenz aus der neuesten POSIX-Spezifikation (POSIX.1-2008) besagt:
Dies bedeutet, dass Sie auf einem POSIX-kompatiblen Betriebssystem ein Verzeichnis lesen () können sollten, wenn Sie es schreibgeschützt geöffnet haben (O_RDONLY).
Ich habe dies gerade auf einer NetBSD-Box (die sich wirklich um POSIX kümmert) versucht und es funktioniert wie erwartet, während es unter GNU / Linux mit EISDIR fehlschlägt (was nicht passieren sollte).
Ein kurzer Blick auf Linux zeigt, dass dies beabsichtigt ist ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
Während eine konkrete Dateisystemimplementierung sie überschreiben kann (wie dies CEPH tut: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), ist das Standardverhalten, EISDIR zurückzugeben, wann immer jemand versucht, dies zu tun read () ein Verzeichnis, auch wenn es schreibgeschützt geöffnet ist.
Ich habe diese Änderung auf 2.0.x zurückverfolgt, und zumindest für das ext2-Dateisystem war dies immer noch der Fall.
Ja, auf einem POSIX-kompatiblen Betriebssystem sollte es möglich sein, ein Verzeichnis zu lesen, aber einige Kernel (wie Linux und anscheinend andere) ignorieren diese Bedingung einfach und brechen den Standard.
quelle
readdir(2)
ist tragbarer. Das lässt darauf schließen, dass die richtige Antwort auf die Frage von OP "Als XSI populär wurde" lautet.