Стандартные потоки ввода-вывода
Стандартные потоки ввода-вывода (standard input/output streams): потоки ввода-вывода с заранее оговоренным смыслом и направлением; также заранее оговорены (стандартизованы) их метки (номера); см. метки стандартных потоков. Бывают называемы (не совсем точно) «терминалы» (terminal) или «консоли» (console); cм. программный терминал.
Набор стандартных потоков, если не указано иное (см. фоновое исполнение), автоматически открывается и присоединяется операционной системой при начале работы программы. См. перенаправление потоков.
В число стандартных потоков входят:
- стандартный поток ввода; standard input (stream), также stdin; для программ с текстовым (консольным) интерфейсом этот поток подсоединяется к клавиатурному вводу и получает знаки с него в те промежутки времени, когда программа удерживает фокус ввода. См. также перенаправление потоков, буферизация потоков, графический интерфейс#текст и графика.
- стандартный поток вывода; standard output (stream), также stdout; для программ с текстовым (консольным) интерфейсом этот поток подсоединяется к выводу программного терминала (или к устройству вывода); работает постоянно и независимо от любых иных потоков вывода (однако с недетерминированным порядком смешивания потоков знаков). См. также перенаправление потоков, буферизация потоков, графический интерфейс#текст и графика.
- стандартный поток вывода сообщений об ошибках; standard error output (stream), также stderr; поток, вывод в который возможен как явно (приказами работающей программы), так и неявно (в частности, по результатам работы используемых в программе вызовов стандартных библиотек); в остальном аналогичен стандартному потоку вывода.
Некоторые ОС могут не открывать для программы стандартный поток вывода сообщений об ошибках (т. е., автоматически при пуске программы). Некоторые среды исполнения могут предоставлять программе изолированные потоки ввода-вывода.
Метки стандартных потоков
Метки (номера) стандартных потоков всегда определены на уровне операционной системы, а также могут быть дополнительно определены в ином виде в стандартной библиотеке вызовов языка программирования.
Обычно использование стандартных потоков через вызовы библиотеки языка ничем не отличается по результату от использования через вызовы библиотеки системных вызовов (однако см. изолированные потоки ввода-вывода).
Язык Си
В стандартной библиотеке языка Си стандартный поток ввода всегда имеет номер 0 и, как правило, также может быть доступен по библиотечной постоянной stdin
; стандартный поток вывода – соответственно, номер 1 и постоянная stdout
; стандартный поток вывода сообщений об ошибках – соответственно, номер 2 и постоянная stderr
.
ОС UNIX
В операционных системах семейства UNIX, в которых библиотека вызовов системного компилятора Си является также системной библиотекой вызовов, стандартные потоки на уровне системных вызовов обозначаются так же, как в реализации языка Си, принятой в качестве системной.
ОС Windows
В системной библиотеке вызовов ОС Windows в качестве стандартных потоков ввода-вывода (console input/output) используются т. наз. стандартные устройства ввода-вывода, для которых определены дескрипторы (хендлы) STD_INPUT_HANDLE
, STD_OUTPUT_HANDLE
, STD_ERROR_HANDLE
.
Кроме того, работа со стандартными потоками возможно через набор системных вызовов для работы с файлами при указании стандартных названий файлов CONIN$
и CONOUT$
.
Кроме того, любая среда исполнения программ на языке Си содержит вызовы и стандартные метки по образцу языка Си.
Среда исполнения Microsoft Visual Basic имеет изолированные потоки ввода-вывода.
— Ю.Т.