stdin(3) Library Functions Manual stdin(3) NAZWA stdin, stdout, stderr - standardowe strumienie wejscia/wyjscia BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include extern FILE *stdin; extern FILE *stdout; extern FILE *stderr; OPIS W zwyklych okolicznosciach, kazdy program uniksowy przy starcie ma otwierane trzy strumienie: jeden do wejscia, jeden do wyjscia i jeden do wypisywania diagnostyki lub bledow. Sa one zwykle wiazane z terminalem uzytkownika (zob. tty(4), lecz moga tez odnosic sie do plikow lub innych urzadzen, w zaleznosci od ustawienia zadanego przez proces macierzysty (zob. tez rozdzial ,,Redirection" (przekierowanie) w podreczniku sh(1)). Strumien wejsciowy okresla sie jako ,,standardowe wejscie" (ang. standard input), strumien wyjsciowy jako ,,standardowe wyjscie" (ang. standard output), a strumien bledow jako ,,standardowe wyjscie bledow" (ang. standard error). Skrocona postac angielskich nazw tworzy symbole, za pomoca ktorych mozna odnosic sie do tych plikow: stdin, stdout i stderr. Kazdy z tych symboli jest makrem stdio(3) typu wskaznik, wskazujacym na FILE i moze byc uzyty z funkcjami takimi jak fprintf(3) lub fread(3). Poniewaz FILE sa opakowaniem buforujacym uniksowe deskryptory plikow, do tych samych plikow mozna dostac sie rowniez za pomoca surowego uniksowego interfejsu pliku tj. funkcji takich jak read(2) i lseek(2). Przy uruchomieniu programu, liczbami deskryptorow plikow zwiazanymi ze strumieniami stdin, stdout i stderr sa, odpowiednio, 0, 1 i 2. W sa zdefiniowane symbole preprocesora STDIN_FILENO, STDOUT_FILENO i STDERR_FILENO z tymi wartosciami (zastosowanie freopen(3) do jednego z tych strumieni moze zmienic numer deskryptora pliku powiazanego ze strumieniem). Prosze zauwazyc, ze mieszane stosowanie FILE i surowych deskryptorow plikow moze dawac nieoczekiwane wyniki i powinno sie go unikac (dla masochistow: POSIX.1, rozdzial 8.2.3, opisuje szczegolowo jak ta wspolpraca powinna wygladac). Ogolna zasada jest taka, ze deskryptory plikow sa obslugiwane w jadrze, natomiast stdio jest tylko biblioteka. Oznacza to na przyklad, ze po exec(3) potomkowie odziedzicza wszystkie otwarte deskryptory plikow, natomiast wszystkie stare strumienie stana sie niedostepne. Poniewaz symbole stdin, stdout i stderr sa okreslone jako makra, przypisania do nich sa nieprzenosne. Standardowe strumienie moga byc rowniez przypisane do roznych plikow, za pomoca funkcji bibliotecznej freopen(3), wprowadzonej specjalnie, aby dalo sie zmienic przypisania stdin, stdout i stderr. Standardowe strumienie sa zamykane wywolaniem do exit(3) oraz przez zwykle zakonczenie programu. STANDARDY C11, POSIX.1-2008. Standardy wymagaja takze, aby te trzy strumienie byly otwierane przy uruchomieniu programu. HISTORIA C89, POSIX.1-2001. UWAGI Strumien stderr jest niebuforowany. Strumien stdout jest buforowany do wiersza, gdy wskazuje na terminal. Wiersze czesciowe nie pojawia sie, dopoki nie wywola sie fflush(3) lub exit(3) albo dopoki nie wypisany bedzie znak nowego wiersza. Moze to dawac nieoczekiwane wyniki, szczegolnie przy wyjsciu debugowania. Tryb buforowania standardowych strumieni (lub dowolnych strumieni) mozna zmienic wywolaniem setbuf(3) lub setvbuf(3). Prosze zauwazyc, ze w przypadku gdy stdin jest powiazany z terminalem, role moze odgrywac rowniez buforowanie wejscia w sterowniku terminala, zupelnie nie zwiazane z buforowaniem stdio (i faktycznie, zwykle wejscie na terminalu jest buforowane do wiersza w jadrze). Te obsluge wejscia w jadrze mozna zmienic wywolaniami takimi jak tcsetattr(3); zob. tez stty(1) i termios(3). ZOBACZ TAKZE csh(1), sh(1), open(2), fopen(3), stdio(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.18 21 wrzesnia 2025 r. stdin(3)