ein Kapitel zurück                                           ein Kapitel weiter

Für jedes Programm werden folgende FILE - Zeiger eingerichtet (in <stdio.h

stdin   (Standarteingabe)
stdout   (Standartausgabe)
stderr   (Standartfehlerausgabe)

Hierzu erst mal eine kleine Grafik...



Hier sehen sie das stdin normalerweise für die Tastatur und stdout und stderr für den Bildschirm eingestellt sind. Also somit liest jedes scanf und fscanf.....

scanf("%s",string);
fscanf(stdin,"%s",string);

..die Standarteingabe von der Tastatur und jedes printf und fprintf....

printf("Hallo Welt\n");
fprintf(stdout,"Hallo Welt\n");
fprintf(stderr,"Fehler im Programm\n");

...werden Zeichen auf dem Bildschirm ausgegeben. Hierzu noch ein einfaches kurzes Programm zum besseren Verständnis....

/*Download:std.c*/
#include <stdio.h> int main() { int c; while((c=getc(stdin)) != EOF) putc(c,stdout); return 0; }

Wir lesen hier so lange von stdin (Tastatur) bis wir selbst EOF erzeugen. Wenn sie <ENTER



programmname < test.txt

Bildlich sieht dies wie folgt aus......



...mit unserem Programm oben funktioniert. Mit dieser Umleitung wurde praktisch der "test.txt" in die Standarteingabe (stdin) umgeleitet. Hiermit könne sie keine Eingabe mehr von Tastatur machen. Und folge dessen leiten sie mittels...

programmname < test.txt > kopietext.txt

Das ganze wieder Bildlich....



...denn "test.txt" auf die Standarteingabe (stdin) und "kopietext" auf die Standartausgabe (stdout) um. In diesem Fall wird gar nichts mehr auf dem Bildschirm ausgegeben da die Standartausgabe (stdout) ja umgeleitet wurde zu "kopietext.txt". Sie können das mit dem Programm oben ruhig testen.

Auf Systemen die den POSIX-Standard erfüllen (Unix, Linux...) sollte man anstatt stdin, stdout, stderr folgende Konstanten benutzen :

STDIN_FILENO   für stdin
STDOUT_FILENO   für stdout
STDERR_FILENO   für stderr

Diese Konstanten sind in der Headerdatei <unistd.h

Exkurs: Ein-/Ausgabekanäle in der Shell-Programmierung

Unix/Linux-User kennen die Ein-/Ausgabekanäle in der Shell so...

ls -l <0

Hier leiten wir die Ausgabe von ls nach stdout (0). Da dies eh Standardmäßig geschieht ist dieser Fall banal.

Öffnen wir also einen neuen Kanal......

exec 3

Hier erstellen wir einen neuen Kanal mit der Nummer 3. Alle Umlenkungen in diesem Kanal werden auf die Datei log.log ausgeführt (angehängt). Beispielsweise wollen wir nun Kanal 1 (stdout) umleiten in Kanal 3....

ls -l 1

Schon wird die Ausgabe von der Standardausgabe in Kanal 3 (log.log) geschrieben. Den Kanal können sie nun wieder schließen mit....

exec 3

Wollen sie nun aus einen Kanal lesen müssen wir diesen erst dafür öffnen....

exec 3< log.log

Nun können sie aus diesem Kanal wieder mittels.....

less <&3

..lesen was die Datei log.log beinhaltet. Diese Methode wird sehr oft verwendet bei Shell-Skripts, damit die Ausgabe auf die Standardkanäle nicht berührt werden, um stattdessen in eine Protokolldatei zu schreiben. Es wäre doch ärgerlich wenn sie auf einer Konsole arbeiten und bekommen andauernd ein Fehlermeldung ausgegeben. Soviel in kürze zur Shell-Programmierung. Kein Sorge, davon kommt nicht mehr.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf