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

НАИМЕНОВАНИЕ

       stdin, stdout, stderr - стандартные потоки ввода/вывода

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <stdio.h>

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

ОПИСАНИЕ

       В обычном состоянии каждая программа UNIX после запуска имеет при открытых потока, один для ввода данных,
       один  для  вывода  и  один  для  печати  диагностических сообщений или ошибок. Обычно, они присоединены к
       терминалу пользователя (смотрите tty(4)), но также они могут ссылаться на файлы или другие устройства,  в
       зависимости  от  того,  как  это  настроил  родительский  процесс (также смотрите раздел «Перенаправление
       (redirection)» в sh(1)).

       Входной поток называют «стандартным вводом»; выходной поток называют «стандартным выводом»; поток  ошибок
       называют  «стандартным  потоком ошибок». Эти термины в сокращённой форме (символы stdin, stdout и stderr)
       используются для обращения к соответствующим файлам.

       Каждый из этих символов является макросом stdio(3) с типом указателя на FILE и может быть  использован  в
       функциях вроде fprintf(3) или fread(3).

       Так как FILE — буферная обёртка вокруг файловых дескрипторов UNIX, файлы, на которые она ссылается, могут
       быть  доступны  через  обычный  низкоуровневый  файловый  интерфейс UNIX, то есть через функции read(2) и
       lseek(2).

       При запуске программы с потоками stdin, stdout и stderr связываются целочисленные файловые дескрипторы 0,
       1 и 2, соответственно. Для этих значений в <unistd.h> определены  препроцессорные  символы  STDIN_FILENO,
       STDOUT_FILENO  и  STDERR_FILENO  (с  помощью  freopen(3)  у  любого  из этих потоков можно изменить номер
       файлового дескриптора, связанного с потоком).

       Заметим, что одновременное использование FILE и низкоуровневых файловых  дескрипторов  может  привести  к
       непредсказуемым  результатам  и  этого  нужно избегать (для мазохистов: в POSIX.1, раздел 8.2.3, подробно
       описано как должно работать такое взаимодействие). Общее правило: файловые дескрипторы  обрабатываются  в
       ядре,  а  stdio  всего  лишь библиотека. Это означает, что, например, после exec(3) потомок наследует все
       открытые файловые дескрипторы, но все старые потоки становятся недоступными.

       Так как символы stdin, stdout и stderr определены  как  макросы,  присвоение  им  значения  непереносимо.
       Стандартные  потоки  можно  связать  с  различными  файлами  с  помощью  библиотечной функции freopen(3),
       специально созданной для переназначения stdin, stdout и stderr. Стандартные  потоки  закрываются  вызовом
       exit(3) и при нормально завершении программы.

СТАНДАРТЫ

       C11, POSIX.1-2008.

       The standards also stipulate that these three streams shall be open at program startup.

ИСТОРИЯ

       C89, POSIX.1-2001.

ПРИМЕЧАНИЯ

       Поток  stderr  является  небуферизованным.  Поток  stdout  буферизируется  построчно,  если  подключён  к
       терминалу. Часть строки не появляется до тех пор, пока не будет вызвана функция  fflush(3)  или  exit(3),
       или  не  появится символ новой строки. Это может приводить к неожиданным результатам, особенно при выводе
       диагностических сообщений. Режим буферизации  стандартных  потоков  (или  любого  другого  потока)  модно
       изменить  с  помощью  вызова  setbuf(3)  или  setvbuf(3).  Заметим,  что  в  случае  когда stdin связан с
       терминалом, также может быть буферизация ввода в драйвере терминала, никак не  связанная  с  буферизацией
       stdio  (более  того, обычный терминальный ввод буферизируется построчно в ядре). Работу ядра по обработке
       ввода можно изменить с помощью вызова tcsetattr(3) и подобным; также смотрите stty(1) и termios(3).

СМОТРИТЕ ТАКЖЕ

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

ПЕРЕВОД

       Русский перевод этой страницы руководства разработал(и)  Alexander  Golubev  <fatzer2@gmail.com>,  Azamat
       Hackimov   <azamat.hackimov@gmail.com>,   Hotellook,   Nikita   <zxcvbnm3230@mail.ru>,  Spiros  Georgaras
       <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov  <yuray@komyakino.ru>,  Иван  Павлов
       <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                         stdin(3)