Provided by: manpages-pl-dev_4.28.0-2_all 

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)