Потоки ввода-вывода

Материал из ЭНЭ
Версия от 11:21, 26 августа 2015; Yury Tarasievich (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Потоки ввода-вывода (input/output streams): программные средства в составе операционной системы, позволяющие любой работающей программе осуществлять знаковый ввод-вывод, причём последовательно вводимые (получаемые) программой или выводимые (отправляемые) программой знаки машинного алфавита образуют поток (рис. 1).

Работа с потоками ввода-вывода – открытие и закрытие, чтение и запись (ввод и вывод) – доступна программе через вызовы (точки входа) стандартной библиотеки конкретного языка программирования или через вызовы системной библиотеки (системного API).

Например, в стандартной библиотеке языка Си открытие потока осуществляется вызовом open, закрытие – вызовом close, чтение (получение) последовательности (массива) знаков – вызовом read, запись (отправление) – вызовом write. См. также стандартные потоки ввода-вывода, строковый ввод-вывод.

Работающая программа имеет возможность открывать (создавать) любое количество потоков ввода-вывода, которые, как правило, различаются метками (номерами), причём нумерация, как правило, начинается с 0. См. стандартные потоки ввода-вывода.

Строковый ввод-вывод

Вообще содержание потоков ввода-вывода есть произвольный набор знаков машинного алфавита. Практически же, в большинстве стандартных библиотек языков программирования присутствуют вызовы, обрабатывающие потоки ввода-вывода в предположении, что их содержимое соответствует формату простого текста, т. е., что потоки ввода-вывода могут рассматриваться (истолковываться) как потоки вводимых и выводимых строк.

Например, в стандартной библиотеке языка Си чтение (получение) строки знаков осуществляется вызовом gets, запись (отправление) – вызовом puts. См. также стандартные потоки ввода-вывода.

Использование вызовов строкового ввода-вывода по отношению к потоку, содержимое которого не простой текст, не нарушает работы потоков, но может привести к серьёзным смысловым ошибкам в работе программы.

Файлы

В некоторых операционных системах (ОС) работа с потоками ввода-вывода семантически полностью подобна работе с файлами последовательного доступа, т. е., открытие файла в программе тождественно открытию потока (или потоков) ввода-вывода, файловые чтение и запись производятся теми же вызовами, что и для потоков, и т. д.

В некоторых ОС работа с потоками ввода-вывода семантически подобна и работе с файлами произвольного доступа, с тем различием, что для этого типа файлов дополнительно обрабатываются указатели доступа (или пары указателей, чтения и записи); иначе, курсоры.

Например, в стандартной библиотеке языка Си перемещение указателя осуществляется вызовом lseek. См. также стандартные потоки ввода-вывода, строковый ввод-вывод.

Адресаты

Адресаты потоков входящих и исходящих знаков, с точки зрения программы, неизвестны (хотя в некоторых случаях могут быть узнаны с помощью дополнительных вызовов стандартных библиотек). Однако см. стандартные потоки ввода-вывода.

Исторически в качестве адресатов использовались устройства последовательного (знакового) ввода-вывода, т. е., консоли, терминалы, последовательные порты, также файлы (участки в составе устройств хранения) и т. п. В последующем стало возможным использовать в качестве адресатов виртуальные устройства ввода-вывода, т. е., программные модели, например, виртуальные консоли, эмуляторы терминала и т. п.

В любом случае логическое соединение устройств и потоков в программе осуществляется операционной системой, явным или неявным образом; см. также стандартные потоки ввода-вывода.

Ю.Т.