18.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 liegt 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.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 18.1
Standard-Streams in C
18.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 ((Strg) + (Z) bei Windows/MS-DOS und (Strg) + (D) bei UNIX) erzeugt wird. Bei Betätigung von (¢) 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
 Hier klicken, um das Bild zu Vergrößern
Abbildung 18.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
 Hier klicken, um das Bild zu Vergrößern
Abbildung 18.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) umgeleitet wurde zu »kopiertext.txt«. 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 »text.txt« anstatt auf den Bildschirm geschrieben.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 18.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.
|