Общие сведения о библиотеке потокового ввода-вывода

   
На этом шаге мы приведем общие сведения о библиотеке потокового ввода-вывода.

   
Под "программированием на языке С++" обычно понимается "программирование в среде С++". Дело в том, что никакая полезная
программа не может быть написана на языке С++ без привлечения библиотек, включаемых в конкретную среду (в компилятор) языка.
Конкретная среда С++, в которой разрабатывается программа, обычно обеспечивает программиста удобными средствами для работы
с ее библиотеками. При этом по утверждению Б.Страуструпа: "Для использования библиотеки совсем не нужно знание методов,
которые применялись для ее реализации". Однако знание правил использования средств библиотеки совершенно необходимо. Самая незаменимая из
этих библиотек - библиотека ввода-вывода, так как средства ввода-вывода непосредственно в язык С++ (также как и в язык С)
не входят. В программах на языке С++ можно равноправно использовать две библиотеки ввода-вывода: стандартную библиотеку функций языка С
(стандарт ANSI С) и библиотеку классов, специально созданную для языка С++. Библиотека функций языка
С становится доступной в программе, как только в ее заголовок будет включен файл stdio.h. Для обращения к функциям
требуются сведения об их прототипах и соблюдение соглашений стандарта. Подробную информацию можно получить из технической
документации того компилятора, с которым вы работаете.

   
На протяжении всех шагови в программах постоянно использовалась препроцессорная директива:

         #include <iostream.h>

   
Назначение указанного в директиве заголовочного файла iostream.h - связать компилируемую программу с одной
из основных частей библиотеки ввода-вывода, построенной на основе механизма классов. Эта библиотека ввода-вывода
почти стандартна, так как включена практически во все компиляторы С++. Однако о стандарте библиотеки ввода-вывода
С++ можно говорить только неформально. Библиотека создана позже, чем появился язык, она разрабатывалась в некотором
смысле независимо от создания языка С++, не входит в формальное описание языка и написана на языке С++.
Потоки ввода-вывода

   
В соответствии с названием заголовочного файла iostream.h (stream - поток; "i" - сокращение от input - ввод;
"o" - сокращение от output - вывод) описанные в этом файле средства ввода-вывода обеспечивают программиста механизмами
для извлечения данных из потоков и для включения (внесения) данных в потоки. Поток определяется как последовательность байтов
(символов) и с точки зрения программы не зависит от тех конкретных устройств (файл на диске, принтер, клавиатура, дисплей, стример и т.п.),
с которыми ведется обмен данными. При обмене с потоком часто используется вспомогательный участок основной памяти - буфер потока
(рисунок 1- буфер вывода, рисунок 2 - буфер ввода).


Рис.1. Буферизированный выходной поток

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

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


Рис.2. Буферизированный входной поток

   
Используемые в программах потоки логически делятся на три типа:

  • входные, из которых читается информация;
  • выходные, в которые вводятся данные;
  • двунаправленные, допускающие как чтение, так и запись.

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

   
В соответствии с особенностями "устройства", к которому "присоединен" поток, потоки принято делить на

  • стандартные,
  • консольные,
  • строковые и
  • файловые.

   
Из перечисленных потоков мы не будем рассматривать только консольные потоки. Причин для этого несколько. Во-первых, консольные потоки
отсутствовали в классических реализациях библиотеки потокового ввода-вывода. Во-вторых, консольные потоки несовместимы с операционной
средой Microsoft Windows и могут использоваться только при разработке программ, работающих под управлением MS-DOS.
Консольные потоки поддерживаются классом constream и обеспечивают удобный доступ к терминалу. В них есть возможности работы
с клавиатурой и средства манипуляции с участками экрана и с экраном в целом.

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

   
На следующем шаге мы приведем иерархию классов библиотеки ввода-вывода.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий