stdin(3) Library Functions Manual stdin(3) BEZEICHNUNG stdin, stdout, stderr - Standard-E/A-Datenstrome BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include extern FILE *stdin; extern FILE *stdout; extern FILE *stderr; BESCHREIBUNG Unter normalen Bedingungen werden beim Start jedes UNIX-Programms drei Datenstrome geoffnet: Einen fur die Eingabe, einen fur die Ausgabe und einen zur Ausgabe von Diagnose- oder Fehlermeldungen. Diese werden typischerweise an das Terminal des Benutzers angehangt (siehe tty(4)), konnten sich stattdessen aber auch auf Dateien oder andere Gerate beziehen, abhangig von der Wahl des ubergeordneten Prozesses. (Siehe auch den Abschnitt >>Redirections<< von sh(1).) Der Eingabedatenstrom wird als >>Standardeingabe<<, der Ausgabedatenstrom als >>Standardausgabe<< und der Fehlerdatenstrom wird als >>Standardfehler<< referenziert. Die englische Form dieser Begriffe wird abgekurzt, um sich auf die Dateien zu beziehen, und zwar als stdin, stdout und stderr. Jedes dieser Symbole ist ein stdio(3)-Makro des Typs Zeiger auf FILE und kann mit Funktionen wie fprintf(3) oder fread(3) verwandt werden. Da FILEs ein puffernder Wrapper um UNIX-Dateideskriptoren sind, kann auf die gleichen zugrundeliegenden Dateien auch mittels der rohen UNIX-Dateischnittstelle zugegriffen werden, d.h. mittels Funktionen wie read(2) und lseek(2). Beim Starten eines Programms sind die ganzzahligen, den Datenstromen stdin, stdout und stderr zugeordneten Dateideskriptoren 0, 1 bzw. 2. Die Praprozessorsysmbole STDIN_FILENO, STDOUT_FILENO und STDERR_FILENO sind mit diesen Werten in definiert. (Durch freopen(3) auf einen dieser Datenstrome kann die dem Datenstrom zugeordnete Dateideskriptornummer geandert werden.) Beachten Sie, dass das Vermischen von FILEs und rohen Dateideskriptoren zu unerwarteten Ergebnissen fuhren kann und im Allgemeinen vermieden werden sollte. (Fur die Masochisten: POSIX.1, Abschnitt 8.2.3 beschreibt im Detail, wie diese Wechselwirkung funktionieren soll.) Die allgemeine Regel lautet, dass Dateideskriptoren im Kernel gehandhabt werden, wahrend Stdio nur eine Bibliothek ist. Das bedeutet beispielsweise, dass der Kindprozess nach einem exec(3) alle offenen Dateideskripten erbt, aber der Zugriff auf alle alten Datenstrome nicht mehr moglich ist. Da die Symbole stdin, stdout und stderr als Makros spezifiziert sind, ist eine Zuweisung an sie nicht portierbar. Die Standard-Datenstrome konnen mit der Hilfe der Bibliotheksfunktion freopen(3) dazu gebracht werden, auf andere Dateien zu zeigen. Dies wurde insbesondere eingefuhrt, um die Zuweisung von stdin, stdout und stderr andern zu konnen. Die Standarddatenstrome werden durch einen Aufruf von exit(3) und bei der normalen Programmbeendigung geschlossen. STANDARDS C11, POSIX.1-2008. Die Standards fordern auch, dass diese drei Datenstrome beim Starten eines Programms geoffnet werden. GESCHICHTE C89, POSIX.1-2001. ANMERKUNGEN Der Datenstrom stderr ist nicht gepuffert. Der Datenstrom stdout ist zeilenweise gepuffert, wenn er auf ein Terminal zeigt. Unvollstandige Zeilen werden nicht auftauchen, bis fflush(3) oder exit(3) aufgerufen werden oder ein Zeilenumbruch ausgegeben wird. Dies kann zu unerwarteten Ausgaben fuhren, insbesondere bei der Fehlersuche. Der Puffermodus der Standard-Datenstrome (oder aller anderen Datenstrome) kann mittels der Aufrufe setbuf(3) oder setvbuf(3) geandert werden. Beachten Sie, dass es auch Eingabepufferung im Terminal gibt (fur den Fall, dass stdin einem Terminal zugeordnet ist), die vollkommen unabhangig von der Stdio-Pufferung ist. (Tatsachlich ist die normale Terminaleingabe zeilenweise im Kernel gepuffert.) Diese Kernel-Eingabehandhabung kann mit Aufrufen wie tcsetattr(3) geandert werden; siehe auch stty(1) und termios(3). SIEHE AUCH csh(1), sh(1), open(2), fopen(3), stdio(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.12 24. Dezember 2024 stdin(3)