Язык С++ и программирование на нем. Рейзлин В.И. - 180 стр.

UptoLike

Составители: 

182
Функция rdbuf() позволяет получить указатель на связанный с
потоком буфер. Эта функция имеет прототип streambuf * rdbuf() const;
Наконец, функция setbuf() с прототипом void setbuf(char * buf,
int n) позволяет связать с потоком другой буфер. Здесь bufуказатель
на другой буфер длины n.
27.8. Файлы с произвольным доступом
Произвольный доступ в системе ввода-вывода реализуется с по-
мощью функций seekg() и seekp(), используемых для позиционирова-
ния, соответственно, входного и выходного потока. Каждая из них име-
ет по два прототипа:
istream& seekg(long pos);
istream& seekg(long pos, seek_dir dir);
ostream& seekp(long offset);
ostream& seekp(long offset, seek_dir dir);
Здесь параметр pos задает абсолютную позицию в файле относи-
тельно начала файла. Параметр offset задает смещение в файле, а пара-
метр dir – направление смещения, которое может принимать значения в
соответствии с определением из класса ios:
enum seek_dir { beg, cur, end };
Здесь константы перечисления определяют:
ios::beg смещение от начала файла,
ios::cur – смещение относительно текущей позиции,
ios::end – смещение от конца файла.
С каждым потоком связан указатель позиционирования, который
изменяет свое значение в результате операции ввода или вывода. Для
выполнения операций произвольного доступа файл должен открываться
в двоичном режиме.
Получить текущее значение позиции в потоке ввода или вывода
можно с помощью функций tellg() и tellp(), соответственно. Эти функ-
ции имеют следующие прототипы:
long tellg ();
long tellp();
Следующий пример демонстрирует возможность позиционирова-
ния потока ввода информации: