Provided by: manpages-de-dev_4.26.0-1_all bug

BEZEICHNUNG

       stdin, stdout, stderr - Standard-E/A-Datenströme

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <stdio.h>

       extern FILE *stdin;
       extern FILE *stdout;
       extern FILE *stderr;

BESCHREIBUNG

       Unter  normalen  Bedingungen  werden beim Start jedes UNIX-Programms drei Datenströme geöffnet: Einen für
       die Eingabe, einen für die Ausgabe und einen zur Ausgabe von Diagnose- oder Fehlermeldungen. Diese werden
       typischerweise an das Terminal des Benutzers angehängt (siehe tty(4)), könnten sich stattdessen aber auch
       auf Dateien oder andere Geräte beziehen, abhängig von der Wahl des übergeordneten 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
       abgekürzt, 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  Datenströmen  stdin,  stdout  und  stderr
       zugeordneten  Dateideskriptoren  0,  1  bzw.  2. Die Präprozessorsysmbole STDIN_FILENO, STDOUT_FILENO und
       STDERR_FILENO sind mit diesen  Werten  in  <unistd.h>  definiert.  (Durch  freopen(3)  auf  einen  dieser
       Datenströme kann die dem Datenstrom zugeordnete Dateideskriptornummer geändert werden.)

       Beachten  Sie,  dass  das  Vermischen  von  FILEs und rohen Dateideskriptoren zu unerwarteten Ergebnissen
       führen kann und im Allgemeinen vermieden werden sollte. (Für 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, während  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 Datenströme nicht mehr möglich ist.

       Da die Symbole stdin, stdout und stderr als Makros spezifiziert sind, ist eine  Zuweisung  an  sie  nicht
       portierbar.  Die  Standard-Datenströme  können  mit  der  Hilfe  der  Bibliotheksfunktion freopen(3) dazu
       gebracht werden, auf andere Dateien zu zeigen. Dies wurde insbesondere eingeführt, um die  Zuweisung  von
       stdin,  stdout und stderr ändern zu können. Die Standarddatenströme 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 Datenströme beim Starten eines Programms geöffnet 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. Unvollständige Zeilen werden nicht auftauchen, bis fflush(3) oder exit(3) aufgerufen
       werden oder ein Zeilenumbruch ausgegeben wird. Dies kann zu unerwarteten  Ausgaben  führen,  insbesondere
       bei  der  Fehlersuche.  Der  Puffermodus  der  Standard-Datenströme (oder aller anderen Datenströme) kann
       mittels  der  Aufrufe  setbuf(3)  oder  setvbuf(3)  geändert  werden.  Beachten   Sie,   dass   es   auch
       Eingabepufferung  im  Terminal  gibt  (für  den  Fall,  dass  stdin  einem  Terminal zugeordnet ist), die
       vollkommen  unabhängig  von  der  Stdio-Pufferung  ist.  (Tatsächlich  ist  die  normale  Terminaleingabe
       zeilenweise  im  Kernel  gepuffert.)  Diese  Kernel-Eingabehandhabung  kann mit Aufrufen wie tcsetattr(3)
       geändert werden; siehe auch stty(1) und termios(3).

SIEHE AUCH

       csh(1), sh(1), open(2), fopen(3), stdio(3)

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder  neuer
       bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn  Sie  Fehler  in  der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die
       Mailingliste der Übersetzer.

Linux man-pages 6.9.1                              2. Mai 2024                                          stdin(3)