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.