16.10 Standard-Streams in C 

Für jedes ausführbare Programm werden die folgenden Standard-Streams bereitgestellt:
- stdin – Standardeingabe
- stdout – Standardausgabe
- stderr – Standardfehlerausgabe
In der Regel ist der Stream stdin für die Eingabe über die Tastatur eingestellt. Für die Ausgabe auf dem Bildschirm sind die Streams stdout und stderr eingerichtet. Der Unterschied zwischen stdout und stderr besteht darin, dass stderr nicht gepuffert wird – im Gegensatz zu stdout. Daher liest jedes scanf() und fscanf()
scanf("%s", string); fscanf(stdin,"%s", string);
von der Standardeingabe (Tastatur), und jedes printf() und fprintf()
printf("Hallo Welt\n"); fprintf(stdout, "Hallo Welt\n"); fprintf(stderr, "Fehler im Programm\n");
wird auf dem Bildschirm ausgegeben.
Abbildung 16.1 Standard-Streams in C
16.10.1 Standard-Streams umleiten 

Mit dem folgenden Listing will ich Ihnen zeigen, wie Sie diese Streams umleiten können:
/* umleitung.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int c; while((c=getc(stdin)) != EOF) putc(c,stdout); return EXIT_SUCCESS; }
Es wird so lange von stdin (Tastatur) eingelesen, bis EOF ( +
bei Windows/MS-DOS und
+
bei UNIX) erzeugt wird. Wenn Sie
drücken, wird die Eingabe auf stdout (Bildschirm) ausgegeben.
Diese Standard-Streams lassen sich aber auch umleiten, etwa mit folgender Eingabe in der Kommandozeile:
programmname < test.txt
Abbildung 16.2 Standardeingabe umleiten (»stdin«)
Mit dieser Umleitung wurde die Datei test.txt über die Standardeingabe (stdin) zum Programm umgeleitet. Damit lässt sich allerdings nun keine Eingabe mehr über die Tastatur vornehmen. Natürlich kann die Standardausgabe ebenso umgeleitet werden:
programmname < test.txt > kopietext.txt
Abbildung 16.3 Standardeingabe und Standardausgabe umgeleitet
Die Datei test.txt wird damit auf die Standardeingabe (stdin) und die Datei kopiertext.txt auf die Standardausgabe (stdout) umgeleitet. In diesem Fall wird gar nichts mehr auf dem Bildschirm ausgegeben, da die Standardausgabe (stdout) zu kopiertext.txt umgeleitet wurde. Natürlich wäre auch eine solche Umleitung möglich:
programmname > text.txt
Hier wurde nur die Standardausgabe umgeleitet. Damit würde alles, was mit der Tastatur eingegeben wurde, in die Datei test.txt anstatt auf den Bildschirm geschrieben.
Abbildung 16.4 Standardausgabe umgeleitet
Auf Systemen, die den POSIX-Standard erfüllen (UNIX, Linux, FreeBSD ...), aber mittlerweile auch auf vielen anderen Compilern, sollten Sie statt der Standard-Streams stdin, stdout und 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> deklariert, die daher im Programm mit eingebunden werden muss.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.