OpenSCADAWiki: Roman Savochenko/C Short All/part2/part16
 

2.16 Потоковые функции языка C++

Потоковые функции языка C++ представляют собой подборку классов предоставляющих функции для работы с основными потоковыми устройствами системы. Для подключения потоковых функций (классов) необходимо включать следующие заголовочные файлы:
<iostream> -- Включает описание классов: cin, cout, cerr, clog.
<iomanip> -- Включает информацию для обработки форматированного ввода-вывода;
<fstream> -- Включает информацию для выполнения операций с файлами;
<strstream> -- Включает информацию для выполнения операций со строкой.

Потоковые классы имеют следующую иерархию:

Примеры использования:
cout << "Сообщение" << endl;        \\печать строки
cout << "Address"   << (void *)ptr; \\указатель
cin.tie(&cout);     \\связывание, для печати 
                    \\приглашения ранее запроса
cin.tie(NULL);      \\развязывание потока
ofstream outClnt("client.dat",ios::out); \\открыть
                    \\файл для записи
ifstream inClnt("client.dat",ios::in);   \\открыть 
                    \\файл для чтения
strstream ss
ss << "TEXT" << 23 << ends;
String msg( ss.str() );


Операции взятия из потока возвращают "false" при вводе признака конца файла. Для расширенной манипуляций с потоками допускается определение манипуляторов пользователя в виде ostream &tab(ostream &output) { return output << \t; }

2.16.1 Манипуляторы потока

endl <iostream>
ostream& endl(ostream& outs);
Перевод курсора на следующую строку;

ends <iostream>
ostream& ends(ostream& outs);
Вывести нулевой байт (символ конца строки);

2.16.2 Компонентные функции класса ios <iostream>

bad
int bad();
При ошибке возвращает ненулевое значение.

bitalloc
static long bitalloc();
Возвращает установки флагов. Полученное значение может быть использовано для очистки, установки или проверки флагов.

clear
void clear(int = 0);
Устанавливает состояние потока (обнулить или установить указанные биты).
eofbit - признак конца файла;
failbit - ошибка форматирования, но символы не утеряны;
badbit - потеря данных;
goodbit - ошибок нет.

eof
int eof();
Возвращает ненулевое значение, если имеет место условие конца файла (EOF).

fail
int fail();
Возвращает ненулевое значение, если операция обмена с потоком терпит неудачу.

fill
char fill();
char fill(char);
Устанавливает символ заполнения потока. Возвращает старое значение символа заполнения.

flags
long flags();
long flags(long);
Устанавливает флаги форматирования. Возвращает ранее установленное значение флагов.

good
int good();
Возвращает ненулевое значение если не установлен ни один флаг состояния (ошибок нет).

init
void init(streambuf *);
Связывает ios с указанным <streambuf>.

precision
int precision();
int precision(int);
Устанавливает точность вещественных чисел. Возвращает предыдущее значение точности.

rdbuf
streambuf* rdbuf();
Возвращает указатель на буфер (объект класса <bufstream>), связанный с потоком.

rdstate
int rdstate();
Возвращает текущее состояние потока.

setf
long setf(long);
long setf(long setbits, long field);
Устанавливает флаги по значению параметра или сбрасывает те биты состояния, которые отмечены в <field>, и устанавливает указанные в <setbits>. Возвращает предыдущие значения флагов.

setstate
void setstate(int);
Устанавливает указанные биты состояния.

tie
ostream* tie();
ostream* tie(ostream *);
Организует поток, взаимосвязанный с потоком, на который указывает <ostream*>. Возвращает указатель на взаимосвязанный предыдущий поток, если такой есть.

unself
long unself(long);
Очищает указанные биты состояния потока. Возвращает предыдущее значение.

width
int width();
int width(int);
Устанавливает ширину. Возвращает предыдущее значение.

xalloc
static int xalloc();
????

2.16.3 Компонентные функции класса ostream <iostream>

flush
ostream& flush(ostream& outs);
Сброс строки из буферов в поток;

put
cout.put(char c);
ostream& put(char c);
Вставить в поток символ <c>

seekp
ostream& seekp(long beg);
ostream& seekp(long beg, seek_dir);
Перемещает указатель текущей позиции выходного потока.

tellp
long tellp();
Возвращает текущую позицию указателя записи для выходного потока.

write
oatream& write(const signed char *string, int n);
ostream& write(const unsigned char *string, int n);
Помещает в выходной поток <n> символов из массива, на который указывает <string>. Нуль-символы включаются в число переносимых символов.

2.16.4 Компонентные функции класса istream <iostream>

gcount
int gcount;
Возвращает число символов, извлеченных из потока последним обращением.

get
istream& get(char& c);
istream& get(char* ptr, int len, char delim = '$\backslash $n');
istream& get(streambuf& sb, char delim = '$\backslash $n');
Извлекает из входного потока символы.

getline
istream& getline(signed char ,int sizeof(char), '$\backslash $n');
Тоже что и get, но символ-разделителя, также, помещается в принятую строку символов.

ignore
istream& ignore(int n = 1,int delim = EOF);
Пропускает до n символов входного потока. Останавливается, если встретился разделитель (второй параметр), по умолчанию равный EOF.

peek
int peek();
Извлекает следующий символ из входного потока не удаляя его в потоке.

putback
istream& putback(char);
Помещает символ назад во входной поток.

read
istream& read(signed char *string, int n);
istream& read(unsigned char *string, int n);
Извлекает из входного потока группу символов <n> и помещает их в массив <string>.

seekg
istream& seekg(long beg);
istream& seekg(long beg, seek_dir);
Перемещает указатель чтения входного потока.

tellg
long tellg();
Возвращает текущую позицию указателя чтения входного потока.

Таблица 14. Флаги класса ios, управляющие форматированием ввода/вывода (манипуляторы потока)
ИмяНазначение
appЗаписать все данные в конец файла.
ateПереместиться в конец исходного открытого файла. Данные могут быть записаны в любое место файла.
binaryОткрыть файл для двоичного ввода или вывода.
decДесятичная система счисления (ОСС=10).
fixedИспользовать формат 123.45 для вывода вещественных чисел (с фиксированной точкой).
hexШестнадцатеричная система счисления (ОСС = 16).
inОткрыть файл для ввода.
internalПоместить разделительные символы после знака или основания системы счисления (ОСС).
leftВыравнивать по левой стороне поля.
octВосьмеричная система счисления (ОСС= 8).
outОткрыть файл для вывода.
rightВыравнивать по правой стороне поля.
setfill(n)Установка заполняющего символа <n>.
scientificИспользовать формат 1.2345Е2 для вывода вещественных чисел (экспоненциальная или научная нотация).
setbase(n)Установка значения основания <n>.
setprecision(n)Установка точности <n>.
setw(n)Установка ширины поля <n>.
showbaseУказывать ОСС при выводе.
showpointПечатать десятичную точку и следующие за ней нули при выводе вещественных чисел.
showposДобавлять '+' при выводе положительных чисел.
skipwsИгнорировать символы разделители при вводе.
stdioФлэшировать stdout, sfcderr после операции.
truncОтбрасывать содержимое файла, если он существует.
uppercaseШестнадцатеричные цифры печатать в верхнем регистре.
unitbufФлэшировать потоки после операции.