Everything is a file

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

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.[1]

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‘)[2] 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.

Verzeichnisstruktur als Namensraum[Bearbeiten]

Siehe auch: 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.[3] 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.[4] Das POSIX-Analogon, POSIX IPC-Namen, basieren nicht auf Dateien.[5]

Sekundärspeicher und Dateien[Bearbeiten]

Eine weitere[6] 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).[6] 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.”

Ken Thompson[7]

Dieses Verständnis von Dateien ist heute selbstverständlich und in den meisten Mainstream-Betriebssystemen vorzufinden.

Geräte[Bearbeiten]

Hauptartikel: Gerätedatei

Die Idee, Geräte über Dateien verfügbar zu machen, stammt nach eigenen Angaben von Dennis Ritchie.[8]

Siehe auch[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1.  Machtelt Garrels: Introduction to Linux. A Beginner's Guide. 2. Auflage. Fultus, 2007, ISBN 1-59682-112-4, Abschnitt 3.1.1.1.
  2. Linus Torvalds: signalfd v2 – signalfd core. Abgerufen am 17. Januar 2013.
  3. 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).
  4. Siehe ftok() Bibliotheksfunktion
  5. Rochkind: Advanced UNIX Programming, 2. Auflage, Addison-Wesley, 2004, Kapitel 7.6.2
  6. a b Kernighan, Pike: The UNIX Programming Environment, Prentice Hall, 1984, Kapitel 2
  7. K. Thompson, UNIX Implementation in: Bell System Technical, 1978, Ausgabe 57, Seite 1931–1946
  8. Dennis Ritchie: The Evolution of the Unix Time-sharing System, in: Language Design and Programming Methodology, 25–35, Springer Berlin/Heidelberg, 1980 (online)