Everything is a file
Everything is a file (englisch für Alles ist eine Datei) beschreibt eine der definierenden Eigenschaften von Unix und seinen Abkömmlingen, dass eine große Bandbreite an Ein-/Ausgabe-Ressourcen wie Dokumente, Verzeichnisse, Festplatten, Modems, Tastaturen, Drucker und sogar Interprozess- und Netzwerkverbindungen als einfache Byteströme via Dateisystem verfügbar sind.<ref>Machtelt Garrels: Introduction to Linux. A Beginner's Guide. 2. Auflage. Fultus, 2007, ISBN 1-59682-112-4, Abschnitt 3.1.1.1.</ref>
Der Vorteil dieses Ansatzes ist, dass dieselben Werkzeuge und Programmierschnittstellen für den Zugriff auf all diese Ressourcen genutzt werden können. Wenn eine Datei geöffnet wird, erhält das Programm vom Kernel einen Dateideskriptor. Für alle nachfolgenden Operationen dient dieser als Ein-/Ausgabe-Schnittstelle. Da auch für anonyme Pipes und Netzwerksockets Dateideskriptoren angelegt werden, die jedoch keinen Pfad haben, wird das Prinzip des Öfteren auch Everything is a file descriptor (‚Alles ist ein Dateideskriptor‘) oder, nach Linus Torvalds, Everything is a stream of bytes (‚Alles ist ein Bytestrom‘)<ref>Linus Torvalds: signalfd v2 – signalfd core. Abgerufen am 17. Januar 2013.</ref> genannt.
Zusätzlich existiert eine Reihe von virtuellen Dateisystemen und Pseudodateisystemen, die Informationen über den Systemzustand und Prozesse hierarchisch strukturiert verfügbar machen.
Der Begriff wird durchweg als Schlagwort für die Andersartigkeit von unixoiden Systemen im Umgang mit Dateien verwendet. Er ist jedoch nicht scharf abgegrenzt und zielt, wie oben angedeutet, je nach Verwendung auf verschiedene Aspekte ab. Während die oben genannten Eigenschaften auch heutzutage nur bei unixartigen Betriebssystemen vorzufinden sind und weithin mit everything is a file verbunden werden, sind von Unix auch Neuerungen ausgegangen, die mittlerweile allgegenwärtig sind. Die folgenden Abschnitte behandeln die Aspekte im Einzelnen.
Inhaltsverzeichnis
Verzeichnisstruktur als Namensraum
Die Verzeichnisstruktur ist ein einheitlicher, hierarchisch gegliederter Namensraum, über den eine Datei einen Pfad erhält, unter dessen Namen sie verfügbar ist. Ein Verzeichnis ist eine spezielle Datei, die alle enthaltenen Verzeichniseinträge auflistet. Darunter können sowohl Dateien als auch wieder Verzeichnisse sein. Diese sich so ergebende Verzeichnishierarchie kann sich über verschiedene Geräte erstrecken. In dieser Form war das Dateisystem schon in Multics, einem Vorläufer von Unix, enthalten.<ref>R. C. Daley, P. G. Neumann: A General-Purpose File System For Secondary Storage In: AFIPS '65 (Fall, part I), Las Vegas, 1965, S. 213–229 (online).</ref> Derartige Verzeichnisstrukturen sind mittlerweile weit verbreitet, wenn auch mit gewissen Abweichungen. Beispielsweise sind sie bei MS-DOS und Windows nicht einheitlich: Pfade enthalten auch einen gerätespezifischen Laufwerksbuchstaben.
Der Namensraum wird auch von Named Pipes genutzt und dient als Grundlage für die weit verbreitete System V IPC-Schnittstelle, bei der existierende Dateien gewissermaßen als Treffpunkt zweier Prozesse fungieren.<ref>Siehe ftok() Bibliotheksfunktion</ref> Das POSIX-Analogon, POSIX IPC-Namen, basieren nicht auf Dateien.<ref>Rochkind: Advanced UNIX Programming, 2. Auflage, Addison-Wesley, 2004, Kapitel 7.6.2</ref>
Sekundärspeicher und Dateien
Eine weitere<ref name="unix environment">Kernighan, Pike: The UNIX Programming Environment, Prentice Hall, 1984, Kapitel 2</ref> Lesart des Prinzips, die heute nicht mehr verbreitet ist, bezieht sich auf die Neuerung, dass Dateien unter UNIX aus einer einfachen Aneinanderreihung von Bytes bestehen und darüber hinaus in ihrem Formats keinen Einschränkungen unterworfen sind (im Gegensatz zu damals verbreiteten Datensatz-orientierten Dateisystemen).<ref name="unix environment" /> Ziel war, Gerätespezifika einzuebnen, von der Speicherorganisation zu abstrahieren und möglichst viele Entscheidungen dem Userspace zu überlassen:
“[…] the UNIX kernel does not support file access methods, file disposition, file formats, file maximum size, spooling, command language, logical records, physical records, assignment of logical file names, logical file names, more than one character set, an operator’s console, an operator, log-in, or log-out. Many of these things are symptoms rather than features. Many of these things are implemented in user software using the kernel as a tool.”
Dieses Verständnis von Dateien ist heute selbstverständlich und in den meisten Mainstream-Betriebssystemen vorzufinden.
Geräte
Die Idee, Geräte über Dateien verfügbar zu machen, stammt nach eigenen Angaben von Dennis Ritchie.<ref>Dennis Ritchie: The Evolution of the Unix Time-sharing System, in: Language Design and Programming Methodology, 25–35, Springer Berlin/Heidelberg, 1980 (online)</ref>
Siehe auch
Einzelnachweise
<references />