Provided by: manpages-pl-dev_4.27.0-1_all bug

NAZWA

       stdin, stdout, stderr - standardowe strumienie wejścia/wyjścia

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <stdio.h>

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

OPIS

       W  zwykłych  okolicznościach,  każdy program uniksowy przy starcie ma otwierane trzy strumienie: jeden do
       wejścia, jeden do wyjścia i jeden do  wypisywania  diagnostyki  lub  błędów.  Są  one  zwykle  wiązane  z
       terminalem  użytkownika  (zob.  tty(4),  lecz  mogą  też  odnosić  się  do  plików lub innych urządzeń, w
       zależności  od  ustawienia  żądanego  przez  proces  macierzysty   (zob.   też   rozdział   „Redirection”
       (przekierowanie) w podręczniku sh(1)).

       Strumień  wejściowy określa się jako „standardowe wejście” (ang. standard input), strumień wyjściowy jako
       „standardowe wyjście” (ang. standard output), a strumień błędów jako „standardowe wyjście  błędów”  (ang.
       standard  error). Skrócona postać angielskich nazw tworzy symbole, za pomocą których można odnosić się do
       tych plików: stdin, stdout i stderr.

       Każdy z tych symboli jest makrem stdio(3) typu wskaźnik, wskazującym na FILE i może być użyty z funkcjami
       takimi jak fprintf(3) lub fread(3).

       Ponieważ FILE są opakowaniem buforującym uniksowe deskryptory plików, do tych samych plików można  dostać
       się również za pomocą surowego uniksowego interfejsu pliku tj. funkcji takich jak read(2) i lseek(2).

       Przy  uruchomieniu  programu,  liczbami  deskryptorów  plików  związanymi ze strumieniami stdin, stdout i
       stderr są, odpowiednio, 0, 1 i  2.  W  <unistd.h>  są  zdefiniowane  symbole  preprocesora  STDIN_FILENO,
       STDOUT_FILENO  i  STDERR_FILENO  z  tymi wartościami (zastosowanie freopen(3) do jednego z tych strumieni
       może zmienić numer deskryptora pliku powiązanego ze strumieniem).

       Proszę zauważyć, że mieszane stosowanie FILE i surowych  deskryptorów  plików  może  dawać  nieoczekiwane
       wyniki  i  powinno  się  go  unikać (dla masochistów: POSIX.1, rozdział 8.2.3, opisuje szczegółowo jak ta
       współpraca powinna wyglądać). Ogólna zasada jest taka, że deskryptory plików  są  obsługiwane  w  jądrze,
       natomiast  stdio  jest  tylko  biblioteką.  Oznacza  to na przykład, że po exec(3) potomkowie odziedziczą
       wszystkie otwarte deskryptory plików, natomiast wszystkie stare strumienie staną się niedostępne.

       Ponieważ symbole stdin, stdout i stderr są określone jako makra, przypisania  do  nich  są  nieprzenośne.
       Standardowe  strumienie  mogą  być  również przypisane do różnych plików, za pomocą funkcji bibliotecznej
       freopen(3), wprowadzonej specjalnie, aby dało się zmienić przypisania stdin, stdout i stderr. Standardowe
       strumienie są zamykane wywołaniem do exit(3) oraz przez zwykłe zakończenie programu.

STANDARDY

       C11, POSIX.1-2008.

       Standardy wymagają także, aby te trzy strumienie były otwierane przy uruchomieniu programu.

HISTORIA

       C89, POSIX.1-2001.

UWAGI

       Strumień stderr jest niebuforowany. Strumień stdout jest buforowany do wiersza, gdy wskazuje na terminal.
       Wiersze częściowe nie pojawią się, dopóki nie wywoła się fflush(3) lub exit(3) albo dopóki  nie  wypisany
       będzie  znak  nowego  wiersza.  Może to dawać nieoczekiwane wyniki, szczególnie przy wyjściu debugowania.
       Tryb buforowania standardowych strumieni (lub dowolnych strumieni) można zmienić wywołaniem setbuf(3) lub
       setvbuf(3). Proszę zauważyć, że w przypadku gdy stdin jest powiązany z  terminalem,  rolę  może  odgrywać
       również  buforowanie  wejścia  w  sterowniku  terminala,  zupełnie  nie  związane z buforowaniem stdio (i
       faktycznie, zwykłe wejście na terminalu jest buforowane do wiersza w jądrze). Tę obsługę wejścia w jądrze
       można zmienić wywołaniami takimi jak tcsetattr(3); zob. też stty(1) i termios(3).

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje  o  warunkach  licencji  można  uzyskać
       zapoznając   się   z   GNU General Public License w wersji 3   lub  nowszej.  Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej  manpages-pl-
       list@lists.sourceforge.net.

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