Ввод/вывод на самом низком уровне
интерпретируется как передача последовательности байтов между объектами. Эта
последовательность байтов называется потоком. На этом уровне понятие
типа данных отсутствует. В языке С++ управление потоками осуществляется с
помощью функций библиотеки ввода/вывода, унаследованной от С и объявленной в
заголовочном файле stdio.h или cstdio, или с помощью операторов потока
ввода/вывода. К преимуществам первого способа относится возможность более
гибкого управления форматированием и его полная совместимость с С. Используя
операторы потока ввода/вывода, можно не задумываться о форматах вывода
информации, если это не имеет принципиального значения. Кроме того, этот метод
позволяет переопределить форму вывода для любого класса. Однако, одновременное
использование библиотеки stdio.h и операторов потока ввода/вывода
не желательно. Если без этого обойтись нельзя, то необходимо вызвать функцию sync_with_stdio().
На пользовательском уровне информацию из
потока необходимо преобразовать к различным типам данных. Это так же
осуществляется с помощью функций библиотеки stdio.h
или с помощью операторов потока ввода/вывода.
Используемые в программах потоки
логически делятся на три типа:
-
входные, из которых читается информация;
-
выходные, в которые вводятся данные,
-
двунаправленные, допускающие как чтение, так и
запись.
Над потоком можно выполнять следующие
операции:
-
считывание блока данных из потока в оперативную
память;
-
запись блока данных из оперативной памяти в
поток;
-
обновление блока данных в потоке;
-
считывание записи из потока;
-
занесение записи в поток.
Все потоки ввода/вывода последовательные,
т.е. в каждый момент времени для потока определены позиции записи и ( или ) чтения,
и эти позиции после обмена перемещаются по потоку на длину переданной порции
данных.
В соответствии с особенностями "устройства", к
которому передается информация, потоки принято делить на стандартные,
консольные, строковые и файловые. Стандартные и консольные потоки соответствуют
передаче данных от клавиатуры и к экрану дисплея. Если символы потока в
совокупности образуют символьный массив ( строку ) в основной памяти, то это
строковый поток. Если при использовании потока его символы размещены на внешнем
носителе данных (диске), то говорят о файловом потоке или просто файле.
Файл может быть текстовым или бинарным (
двоичным ). Различие между ними заключается в том, что в текстовом файле
последовательности символов разбиты на строки. Признаком конца строки является
пара символов CR( '\r' - возврат каретки) и LF('\n' - перевод строки) или - '\r'+'\n'. При вводе информации из
текстового файла эта пара символов заменяется символом CR, при выводе, наоборот, - символ CR заменяется парой символов CR и LF. Бинарный файл рассматривается как
последовательность байт. При вводе и выводе информации в бинарный файл никакого
преобразования символов не производится. Кроме того, в текстовом и бинарном
файлах различный способ интерпретации информации. В текстовом файле числа
представляются символами цифр, а в бинарном используется внутренне
представление числа, которое зависит от типа компьютера. Обычно бинарные файлы
используются в том случае, если они являются источником информации, которая не
представляется непосредственно человеку.
В современных операционных системах при
вводе/выводе клавиатура и дисплей рассматриваются как текстовые файлы, поэтому
все операции с потоками рассмотренные далее будут относится к файловым потокам.
Частный случай файлового потока – запись и чтение файлов жесткого диска.
Сходство операций с вводом с клавиатуры и выводом на дисплей является хорошим
помощником в изучении данного материала.
|