· сами состояния определены в классе ios как целые статические константы, называемые флагами состояния потока (goodbit = 0x00; badbit=0x01; eofbit=0x02; failbit=0x04;); значения флагов зависят от реализации, однако имена одинаковы во всех системах; в программе имена флагов состояния: ios::eofbit; ios::goodbit, ios::badbit; ios::failbit; система ввода-вывода С++ предоставляет методы для установки флагов (setstate (ios::eofbit | ios::failbit ) и для получения информации о состоянии потока (good (), eof(), fail(), bad());
· состояние потока можно проверить непосредственно в условии if или в цикле while;
· потоки подразделяют на:
o входные и выходные; из входного потока информация считывается (извлекается); в выходной поток данные вводятся; двунаправленный поток реализует чтение и запись;
o буферизуемые и небуферизуемые; при обмене с потоком часто используется вспомогательный участок основной памяти – буфер потока; при буферизованном потоке вывод выполняется не на устройство, а в буфер; использование буфера как промежуточной ступени при обменах с внешними устройствами повышает скорость передачи данных, так как реальные пересылки осуществляются только тогда, когда буфер уже заполнен (при выводе) или пуст (при вводе); данные помещаются в буфер, перед тем как они будут переданы к внешнему устройству (при выводе данных) или перед тем, как они будут переданы в область памяти выполняемой программы (см. рис.3.1.); заполненный буфер выводится на устройство, как правило, без непосредственного указания в программе; однако программа может потребовать вывести неполный буфер; при вводе буфер обычно заполняется при выполнении первой операции ввода, но специально программировать это не требуется; обычно буферизация реализуется по умолчанию, но в библиотеках есть средства, позволяющие управлять назначением буферов;
o широкие (оперируют широкими символами wchar_t) и узкие (оперируют обычными символами char).
o форматируемые и неформатируемые; форматируемость означает, что при операциях ввода-вывода выполняется преобразование информации; при форматированном вводе-выводе («высоком» уровне) байты группируются в значащие элементы данных (целые числа, числа с плавающей запятой, символы, строки, типы, определенные пользователем); т.к. поток – это последовательность символов, при вводе, как правило, выполняется преобразование данных из символьного вида (внешнего представления) в двоичное (внутреннее) представление, а при выводе – наоборот; форматирование, например, всегда выполняется для стандартных потоков;
ввод-вывод на «низком» уровне (бинарный, неформатированный) обычно сводится к пересылке некоторого числа байтов (в этом случае байт является самостоятельным элементом данных); такая пересылка данных имеет высокую скорость, однако, неудобна для программиста; числа при этом вводе-выводе сохраняются во внутреннем представлении; поток, созданный с помощью оператора <<, представляет из себя поток с отформатированным текстом, и наоборот, поток, содержимое которого считывается с помощью оператора >>, должен быть потоком с отформатированным текстом.
· средства ввода-вывода С++ могут обеспечить последовательный и прямой доступ к данным, несмотря на то, что в С++ не предусмотрены предопределенные структуры потоков последовательного или прямого доступа; хотя все потоки библиотеки ввода-вывода последовательны (т.е. в каждый момент для потока определены позиции записи и (или) чтения, и эти позиции перемещаются по потоку на длину переданной порции данных) можно некоторым образом разместить данные в потоке так, чтобы организовать прямой доступ к ним; возможность позиционировать указатель внутри файла на требуемую позицию реализуется с помощью функций seekg() и seekp(), являющихся соответственно потоковыми функциями ввода и вывода.
Буферизированный выходной поток
Передача при пустом буфере ввода
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.