Viele Entitäten in * nix-ähnlichen (und anderen) Betriebssystemen werden als Dateien betrachtet oder haben einen definierenden dateiähnlichen Aspekt, obwohl sie nicht unbedingt eine Folge von Bytes sind, die in einem Dateisystem gespeichert sind. Wie Verzeichnisse genau implementiert werden, hängt von der Art des Dateisystems ab. Was sie jedoch als Liste enthalten, ist im Allgemeinen eine Folge gespeicherter Bytes. In diesem Sinne sind sie nicht besonders.
Eine Möglichkeit, zu definieren, was eine "Datei" in einem * nix-Kontext ist, besteht darin, dass ihr ein Dateideskriptor zugeordnet ist. Laut Wikipedia-Artikel ein Dateideskriptor
ist ein abstrakter Indikator für den Zugriff auf eine Datei oder eine andere Eingabe- / Ausgaberessource , z. B. eine Pipe oder eine Netzwerkverbindung.
Mit anderen Worten, sie beziehen sich auf verschiedene Arten von Ressourcen, aus denen eine Folge von Bytes gelesen / geschrieben werden kann, obwohl die Quelle / das Ziel dieser Folge nicht spezifiziert ist. Anders ausgedrückt, das "Wo" der Ressource könnte alles sein. Was es ausmacht, ist, dass es ein Informationsfluss ist. Dies ist ein Teil des Grundes, warum manchmal gesagt wird, dass unter Unix "alles eine Datei ist". Sie sollten das nicht ganz wörtlich nehmen, aber es ist eine ernsthafte Überlegung wert. Im Fall eines Verzeichnisses beziehen sich diese Informationen auf den Inhalt des Verzeichnisses und auf einer niedrigeren Implementierungsebene darauf, wie sie im Dateisystem zu finden sind.
In diesem Sinne sind Verzeichnisse etwas Besonderes, da sie im nativen C-Code nicht angeblich mit einem Dateideskriptor verknüpft sind. Die POSIX-API verwendet einen speziellen Typ von Stream-Handle DIR*
. Dieser Typ hat jedoch tatsächlich einen zugrunde liegenden Deskriptor, der abgerufen werden kann . Deskriptoren werden vom Kernel verwaltet, und der Zugriff auf sie erfordert immer Systemaufrufe. Ein weiterer Aspekt eines Deskriptors besteht darin, dass es sich um ein Conduit handelt, das vom Betriebssystemkern gesteuert wird. Sie haben eindeutige (pro Prozess) Nummern, die mit 0 beginnen. Dies ist normalerweise der Deskriptor für den Standardeingabestream .