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