CIP Index Up

E/A - Kanäle

Kanäle, oder englisch streams sind eine abstrahierte Sichtweise von Dateien und Devices. Solange man nur daraus liest oder hineinschreibt, verhalten sie sich wie normale Dateien. Die näheren Details sind nur für C-Programmierer interessant, es ist jedoch auch insofern bedeutsam, als jeder Prozess 3 Kanäle mit besonderer Bedeutung vom parent-Prozeß vererbt bekommt.
stdin (0)
Der Eingabe-Kanal, ist normalerweise verbunden mit dem Terminal, d.h. Eingaben ueber Tastatur können vom Prozeß von hier gelesen werden.

stdout (1)
Der Ausgabe-Kanal. Alle normalen Ausgaben, z.B. mit printf in C oder echo von einer Shell aus werden hier ausgegeben. Dieser Kanal ist normalerweise mit dem Terminal verbunden, d.h. die Ausgaben landen auf dem Bildschirm.

stderr (2)
Der Fehler-Ausgabe-Kanal. Alle Fehlermeldungen werden hier rausgeschrieben. Dieser Kanal ist standardmäßig mit dem gleichen Device wie stdout verbunden, d.h. auch diese Ausgaben landen auf dem Terminal. Der Vorteil der Trennung liegt jedoch darin, daß z.B. bei Umlenkung der Ausgabe eines Prozesses die Fehlermeldungen trotzdem am Terminal zu lesen sind bzw. diese nicht die Datei verschandeln.
Von der Bourne-Shell aus spricht man die Kanäle mit Nummern an: den filehandles. Dies sind die Angaben, die oben in Klammern gemacht wurden. Näheres und Beispiele siehe unter E/A-Umlenkung.

Für den Prozess sind die Standardkanäle ganz normale Dateien, die er beschreiben, schließen und wiedereröffnen kann - er spricht ja auch alle anderen Dateien mit filehandles bzw. Kanalnamen an. Es ist für ihn nicht zu unterscheiden, ob ein hinter stdin nun die Tastatur oder eine Datei steckt (nur wenn er das Betriebssystem explizit danach fragt, z.B. mit istty). Deshalb ist es für nicht-interaktive Programme i.d.R. problemlos Kanäle umzulenken.

Siehe auch:
Umlenkung von Ein-/Ausgabe
Reference-Manuals zu den Funktionen fopen, fclose, fseek, fputs, und ungetc.