GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Seit wann sind Verzeichnisse nicht mehr als Dateien lesbar?

Ich habe die 1. Ausgabe des Buches The Unix Programming Environment. In Kapitel 2 stellen die Autoren fest, dass Verzeichnisse als Dateien lesbar sind, und erwähnen einige Fakten über das Format dieser Dateien. Sie geben einige Verwendungsbeispiele wie cat . (in Übung 2-2).

Zumindest in Darwin sind Verzeichnisse nicht mehr als Dateien lesbar. Zumindest scheinen sie beim Lesen leere Dateien zu sein.

Wann trat diese Änderung auf und gibt es offizielle Dokumente darüber?

Akzeptierte Antwort:

Die Fehlernummerreferenz aus der neuesten POSIX-Spezifikation (POSIX.1-2008) lautet:

[EISDIR]

Ist ein Verzeichnis. Es wurde versucht, ein Verzeichnis mit angegebenem Schreibmodus zu öffnen.

Das bedeutet, dass Sie auf einem POSIX-kompatiblen Betriebssystem in der Lage sein sollten, ein Verzeichnis zu lesen(), wenn Sie es nur lesend geöffnet haben (O_RDONLY).

Ich habe dies gerade auf einer NetBSD-Box (die sich wirklich um POSIX kümmert) ausprobiert und 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):

ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
{
        return -EISDIR;
}

Während eine konkrete Dateisystemimplementierung es überschreiben kann (wie es CEPH tut:http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142), besteht das Standardverhalten darin, EISDIR zurückzugeben, wann immer jemand dies versucht read() ein Verzeichnis, auch wenn es nur zum Lesen geöffnet ist.

Ich habe diese Änderung bis 2.0.x zurückverfolgt, und zumindest für das ext2-Dateisystem war dies immer noch der Fall.

Also, ja, auf einem POSIX-kompatiblen Betriebssystem sollten Sie in der Lage sein, ein Verzeichnis zu lesen, aber einige Kernel (wie Linux und anscheinend andere) ignorieren diese Bedingung einfach und brechen den Standard.


Linux
  1. Kopieren Sie Dateien und Verzeichnisse unter Linux

  2. Größte Dateien oder Verzeichnisse finden?

  3. Linux Dateien und Verzeichnisse löschen

  4. Maximale Anzahl von Dateien/Verzeichnissen unter Linux?

  5. Finden Sie Verzeichnisse, die eine bestimmte Anzahl von Dateien enthalten

Find-Befehl in Linux (Dateien und Verzeichnisse suchen)

So benennen Sie Dateien und Verzeichnisse in Linux um

Ls-Befehl in Linux (Dateien und Verzeichnisse auflisten)

So komprimieren Sie Dateien und Verzeichnisse unter Linux

Komprimieren und Archivieren von Dateien und Verzeichnissen

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach