Bei vielen Geräten besteht die Hauptoperation darin, Bytes vom Computer an ein Peripheriegerät zu senden oder Bytes von einem Peripheriegerät auf dem Computer zu empfangen. Solche Geräte ähneln Pfeifen und funktionieren gut als Zeichengeräte . Für Vorgänge, die nicht gelesen und geschrieben werden (z. B. Flusskontrolle auf einer seriellen Leitung), bietet das Gerät Ad-hoc-Befehle mit der Bezeichnung ioctl .
Einige Geräte ähneln ganz normalen Dateien: Sie bestehen aus einer begrenzten Anzahl von Bytes, und was Sie an einer bestimmten Position schreiben, kann später an derselben Position gelesen werden. Diese Geräte werden Blockgeräte genannt .
Netzwerkschnittstellen sind komplexer: Was sie lesen und schreiben, sind keine Bytes, sondern Pakete. Es wäre zwar immer noch möglich, die übliche Schnittstelle mit read
und zu verwenden write
, aber es wäre umständlich: Vermutlich würde jeder Anruf write
ein Paket senden und jeder Anruf read
ein Paket empfangen (und wenn der Puffer zu klein ist, damit das Paket passt, das paket wäre verloren).
Netzwerkschnittstellen können nur als Geräte vorhanden sein, die sie bereitstellen ioctl
. Dies ist in der Tat das, was einige Unix-Varianten tun, aber nicht Linux. Dieser Ansatz hat einige Vorteile. Unter Linux könnten Netzwerkschnittstellen beispielsweise udev nutzen . Die Vorteile sind jedoch begrenzt, weshalb dies nicht getan wurde.
Die meisten netzwerkbezogenen Anwendungen interessieren sich nicht für einzelne Netzwerkschnittstellen, sondern arbeiten auf einer höheren Ebene. Beispielsweise möchte ein Webbrowser TCP-Verbindungen herstellen, und ein Webserver möchte auf TCP-Verbindungen warten. Hierfür wären Geräte für übergeordnete Netzwerkprotokolle, z
{ echo $'GET http://www.google.com/ HTTP/1.0\r';
echo $'Host: www.google.com\r';
echo $'\r' >&0; cat; } <>/dev/tcp/www.google.com/80
Tatsächlich bieten ksh und bash eine solche Schnittstelle für TCP- und UDP-Clients. Im Allgemeinen sind Netzwerkanwendungen jedoch komplexer als Anwendungen für den Dateizugriff. Während der meiste Datenaustausch mit Anrufen analog zu read
und durchgeführt wird write
, erfordert der Verbindungsaufbau mehr Informationen als nur einen Dateinamen. Das Abhören von TCP-Verbindungen umfasst beispielsweise zwei Schritte: einen, der ausgeführt wird, wenn der Server mit dem Abhören beginnt, und einen, der bei jeder Verbindung eines Clients ausgeführt wird. Solche zusätzlichen Schritte passen nicht gut in die Datei-API. Dies ist der Hauptgrund, warum das Netzwerk eine eigene API hat.
Eine weitere Klasse von Geräten, /dev
für die unter Linux normalerweise keine Einträge vorhanden sind (bei einigen anderen Unix-Varianten jedoch), sind Videoadapter. Grundsätzlich könnten einfache Videoadapter als Framebuffer- Geräte verfügbar gemacht werden, bei denen es sich um Blockgeräte handeln könnte, die aus Blöcken bestehen, die die Farbe jedes Pixels darstellen. Beschleunigte Videoadapter könnten als Zeichengeräte dargestellt werden, auf die Anwendungen Befehle senden. Der Nachteil der Geräteschnittstelle besteht darin, dass sie langsam ist: Die anzeigende Anwendung (in der Praxis ein X-Server) müsste bei jeder Anzeige Kernel-Aufrufe ausführen. Stattdessen schreibt der X-Server meistens direkt in den Speicher des Videoadapters, weil er schneller ist.