Spezielle“ Dateien: Zeichenorientierte- und Blockorientierte Dateien

Wie bereits bemerkt, werden solche Dateien entweder vom System erstellt oder von Geräten Ihres PCs. Wir haben auch bereits geschrieben, dass blockorientierte Geräte gepuffert werden, zeichenorientierte Dateien jedoch nicht. Um das zu veranschaulichen legen Sie eine Diskette in Ihr Laufwerk ein und schreiben Sie zweimal den folgenden Befehl:

$ dd if=/dev/fd0 of=/dev/null

Sie sollten nun folgendes festgestellt haben: beim der ersten Befehlseingabe wurde der gesamte Inhalt der Diskette gelesen. Beim zweiten Mal fand keinerlei Zugriff auf die Diskette statt. Das geschah weil der Inhalt der Diskette nach dem ersten Lesen bereits im Speicher gepuffert wurde und danach keine Änderung des Inhaltes vorgenommen wurde.

Wenn Sie nun aber eine große Datei auf diese Art ausdrucken wollen (ja, das funktioniert):

$ cat /eine/riesige/Datei >/dev/lp0

benötigt der Befehl zur Ausführung immer die gleiche Zeit, egal wie oft Sie ihn hintereinander eingeben. Das geschieht; da /dev/lp0 eine zeichenorientierte Datei ist, dessen Inhalt nicht gepuffert wird.

Der Umstand, dass blockorientierte Dateien gepuffert werden, hat einen netten Seiteneffekt: es werden nicht nur Lesezugriffe sondern auch Schreibaktionen gepuffert. Das ermöglicht ein asynchrones Schreiben auf Festplatten: wenn Sie den Befehl zum Schreiben geben, findet die Aktion nicht sofort statt sondern dann, wenn Linux das möchte.

Schließlich hat jede spezielle Datei je eine sog. Major- und eine Minor-Nummer. Bei der Ausgabe des Befehls ls -l erscheinen diese Nummern anstelle der Größenangabe (die Größe ist bei speziellen Dateien irrelevant):

   ls -l /dev/ide/host0/bus0/target0/lun0/disc /dev/printers/0
   brw-------    1 root     root       3,   0 dic  31  1969 /dev/ide/host0/bus0/target0/lun0/disc
   crw-rw----    1 lp       sys        6,   0 dic  31  1969 /dev/printers/0

Hier sind die Major und Minor von /dev/ide/host0/bus0/target0/lun0/disc 3 und 0, während sie für /dev/printers/0 6 und 0 betragen. Beachten Sie, dass diese Nummern nur innerhalb einer Datei-Kategorie eindeutig sind, d.h., es kann eine zeichenorientierte Datei mit Major 6 und Minor 0 geben (diese Datei gibt es tatsächlich: /dev/pty/s0) und gleichzeitig eine blockorientierte Datei mit Major 6 und Minor 0. Diese Nummern existieren, damit der Kern der Datei die richtigen Aktionen zuweisen kann (eigentlich den Geräten, auf die diese Dateien verweisen): ein Disketten-Laufwerk erfordert schließlich andere Aktionen als etwa eine SCSI-Festplatte.