Потоки ввода-вывода
Потоки ввода-вывода (input/output streams): программные средства в составе операционной системы, позволяющие любой работающей программе осуществлять знаковый ввод-вывод, причём последовательно вводимые (получаемые) программой или выводимые (отправляемые) программой знаки машинного алфавита образуют поток (рис. 1).
Работа с потоками ввода-вывода – открытие и закрытие, чтение и запись (ввод и вывод) – доступна программе через вызовы (точки входа) стандартной библиотеки конкретного языка программирования или через вызовы системной библиотеки (системного API).
Например, в стандартной библиотеке языка Си открытие потока осуществляется вызовом open
, закрытие – вызовом close
, чтение (получение) последовательности (массива) знаков – вызовом read
, запись (отправление) – вызовом write
. См. также стандартные потоки ввода-вывода, строковый ввод-вывод.
Работающая программа имеет возможность открывать (создавать) любое количество потоков ввода-вывода, которые, как правило, различаются метками (номерами), причём нумерация, как правило, начинается с 0. См. стандартные потоки ввода-вывода.
Строковый ввод-вывод
Вообще содержание потоков ввода-вывода есть произвольный набор знаков машинного алфавита. Практически же, в большинстве стандартных библиотек языков программирования присутствуют вызовы, обрабатывающие потоки ввода-вывода в предположении, что их содержимое соответствует формату простого текста, т. е., что потоки ввода-вывода могут рассматриваться (истолковываться) как потоки вводимых и выводимых строк.
Например, в стандартной библиотеке языка Си чтение (получение) строки знаков осуществляется вызовом gets
, запись (отправление) – вызовом puts
. См. также стандартные потоки ввода-вывода.
Использование вызовов строкового ввода-вывода по отношению к потоку, содержимое которого не простой текст, не нарушает работы потоков, но может привести к серьёзным смысловым ошибкам в работе программы.
Файлы
В некоторых операционных системах (ОС) работа с потоками ввода-вывода семантически полностью подобна работе с файлами последовательного доступа, т. е., открытие файла в программе тождественно открытию потока (или потоков) ввода-вывода, файловые чтение и запись производятся теми же вызовами, что и для потоков, и т. д.
В некоторых ОС работа с потоками ввода-вывода семантически подобна и работе с файлами произвольного доступа, с тем различием, что для этого типа файлов дополнительно обрабатываются указатели точки обращения к файлу (или пары указателей, для чтения и записи); иначе, курсоры.
Например, в стандартной библиотеке языка Си перемещение указателя осуществляется вызовом lseek
. См. также стандартные потоки ввода-вывода, строковый ввод-вывод.
Адресаты
Адресаты потоков входящих и исходящих знаков, с точки зрения программы, неизвестны (хотя в некоторых случаях могут быть узнаны с помощью дополнительных вызовов стандартных библиотек). Однако см. стандартные потоки ввода-вывода.
Исторически в качестве адресатов использовались устройства последовательного (знакового) ввода-вывода, т. е., консоли, терминалы, последовательные порты, также файлы (участки в составе устройств хранения) и т. п. В последующем стало возможным использовать в качестве адресатов виртуальные устройства ввода-вывода, т. е., программные модели, например, виртуальные консоли, эмуляторы терминала и т. п.
В любом случае логическое соединение устройств и потоков в программе осуществляется операционной системой, явным или неявным образом; см. также стандартные потоки ввода-вывода.
— Ю.Т.