.\" -*- coding: UTF-8 -*-
.\" From dholland@burgundy.eecs.harvard.edu Tue Mar 24 18:08:15 1998
.\"
.\" This man page was written in 1998 by David A. Holland
.\" Polished a bit by aeb.
.\"
.\" %%%LICENSE_START(PUBLIC_DOMAIN)
.\" Placed in the Public Domain.
.\" %%%LICENSE_END
.\"
.\" 2005-06-16 mtk, mentioned freopen()
.\" 2007-12-08, mtk, Converted from mdoc to man macros
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH stdin 3 "2 мая 2024 г." "Справочные страницы Linux 6.9.1" 
.SH НАИМЕНОВАНИЕ
stdin, stdout, stderr \- стандартные потоки ввода/вывода
.SH БИБЛИОТЕКА
Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP)
.SH ОБЗОР
.nf
\fB#include <stdio.h>\fP
.P
\fBextern FILE *\fP\fIstdin\fP\fB;\fP
\fBextern FILE *\fP\fIstdout\fP\fB;\fP
\fBextern FILE *\fP\fIstderr\fP\fB;\fP
.fi
.SH ОПИСАНИЕ
В обычном состоянии каждая программа UNIX после запуска имеет при открытых
потока, один для ввода данных, один для вывода и один для печати
диагностических сообщений или ошибок. Обычно, они присоединены к терминалу
пользователя (смотрите \fBtty\fP(4)), но также они могут ссылаться на файлы или
другие устройства, в зависимости от того, как это настроил родительский
процесс (также смотрите раздел «Перенаправление (redirection)» в \fBsh\fP(1)).
.P
Входной поток называют «стандартным вводом»; выходной поток называют
«стандартным выводом»; поток ошибок называют «стандартным потоком
ошибок». Эти термины в сокращённой форме (символы \fIstdin\fP, \fIstdout\fP и
\fIstderr\fP) используются для обращения к соответствующим файлам.
.P
Каждый из этих символов является макросом \fBstdio\fP(3) с типом указателя на
\fIFILE\fP и может быть использован в функциях вроде \fBfprintf\fP(3) или
\fBfread\fP(3).
.P
Так как \fIFILE\fP — буферная обёртка вокруг файловых дескрипторов UNIX, файлы,
на которые она ссылается, могут быть доступны через обычный низкоуровневый
файловый интерфейс UNIX, то есть через функции \fBread\fP(2) и \fBlseek\fP(2).
.P
При запуске программы с потоками \fIstdin\fP, \fIstdout\fP и \fIstderr\fP связываются
целочисленные файловые дескрипторы 0, 1 и 2, соответственно. Для этих
значений в \fI<unistd.h>\fP определены препроцессорные символы
\fBSTDIN_FILENO\fP, \fBSTDOUT_FILENO\fP и \fBSTDERR_FILENO\fP (с помощью
\fBfreopen\fP(3) у любого из этих потоков можно изменить номер файлового
дескриптора, связанного с потоком).
.P
Заметим, что одновременное использование \fIFILE\fP и низкоуровневых файловых
дескрипторов может привести к непредсказуемым результатам и этого нужно
избегать (для мазохистов: в POSIX.1, раздел 8.2.3, подробно описано как
должно работать такое взаимодействие). Общее правило: файловые дескрипторы
обрабатываются в ядре, а stdio всего лишь библиотека. Это означает, что,
например, после \fBexec\fP(3) потомок наследует все открытые файловые
дескрипторы, но все старые потоки становятся недоступными.
.P
Так как символы \fIstdin\fP, \fIstdout\fP и \fIstderr\fP определены как макросы,
присвоение им значения непереносимо. Стандартные потоки можно связать с
различными файлами с помощью библиотечной функции \fBfreopen\fP(3), специально
созданной для переназначения \fIstdin\fP, \fIstdout\fP и \fIstderr\fP. Стандартные
потоки закрываются вызовом \fBexit\fP(3) и при нормально завершении программы.
.SH СТАНДАРТЫ
C11, POSIX.1\-2008.
.P
The standards also stipulate that these three streams shall be open at
program startup.
.SH ИСТОРИЯ
C89, POSIX.1\-2001.
.SH ПРИМЕЧАНИЯ
Поток \fIstderr\fP является небуферизованным. Поток \fIstdout\fP буферизируется
построчно, если подключён к терминалу. Часть строки не появляется до тех
пор, пока не будет вызвана функция \fBfflush\fP(3) или \fBexit\fP(3), или не
появится символ новой строки. Это может приводить к неожиданным результатам,
особенно при выводе диагностических сообщений. Режим буферизации стандартных
потоков (или любого другого потока) модно изменить с помощью вызова
\fBsetbuf\fP(3) или \fBsetvbuf\fP(3). Заметим, что в случае когда \fIstdin\fP связан
с терминалом, также может быть буферизация ввода в драйвере терминала, никак
не связанная с буферизацией stdio (более того, обычный терминальный ввод
буферизируется построчно в ядре). Работу ядра по обработке ввода можно
изменить с помощью вызова \fBtcsetattr\fP(3) и подобным; также смотрите
\fBstty\fP(1) и \fBtermios\fP(3).
.SH "СМОТРИТЕ ТАКЖЕ"
\fBcsh\fP(1), \fBsh\fP(1), \fBopen\fP(2), \fBfopen\fP(3), \fBstdio\fP(3)
.PP
.SH ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и)
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>
.
.PP
Этот перевод является свободной программной документацией; он распространяется
на условиях общедоступной лицензии GNU (GNU General Public License - GPL,
.UR https://www.gnu.org/licenses/gpl-3.0.html
.UE
версии 3 или более поздней) в отношении
авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
.PP
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста,
сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу
.MT <debian-l10n-russian@lists.debian.org>
списка рассылки русских переводчиков
.ME .