c++11 标准模板(STL)(std::basic_streambuf)(四)

定义于头文件 
template<

    class CharT,
    class Traits = std::char_traits

> class basic_streambuf;

basic_streambuf 控制字符序列的输入与输出。它包含下列内容并提供到它们的访问:

1) 受控制字符序列,又称为缓冲区,它可含有为输入操作缓冲的输入序列(又称为获取区),和/或为输出操作缓冲的输出序列(又称为放置区)。

2) 关联字符序列,又称作(对于输入)或(对于输出)。它可以是通过 OS API 访问的实体(文件、 TCP 接头、串行端口、其他字符设备),或者可以是能转译成字符源或池的对象( std::vector 、数组、字符串字面量)。

I/O 流对象 std::basic_istream 及 std::basic_ostream ,还有所有导出自它们的对象( std::ofstream 、 std::stringstream 等),都完全以 std::basic_streambuf 实现。

受保护成员函数

寻位

若容许则以用户定义数组替换缓冲区

std::basic_streambuf::pubsetbuf, 
std::basic_streambuf::setbuf

basic_streambuf* pubsetbuf( char_type* s, std::streamsize n )

(1)

protected:
virtual basic_streambuf* setbuf( char_type* s, std::streamsize n )

(2)

1) 调用最终导出类上的 setbuf(s, n)

2) 此函数的基类版本无效果。导出类可覆写此函数,以允许移除或替换受控制字符序列(缓冲区)为用户提供的数组,或为任何实现特定的目的。

参数

s - 指向用户提供的缓冲区中首个 CharT 的指针
n - 用户提供缓冲区中的 CharT 元素数

返回值

1) setbuf(s, n) 的返回值

2) this

 

用相对寻址重定位输入序列、输出序列或两者中的下一位置指针

std::basic_streambuf::pubseekoff, 
std::basic_streambuf::seekoff

pos_type pubseekoff( off_type off, std::ios_base::seekdir dir,
                     std::ios_base::openmode which = ios_base::in | ios_base::out );

(1)
protected:

virtual pos_type seekoff( off_type off, std::ios_base::seekdir dir,

                          std::ios_base::openmode which = ios_base::in | ios_base::out );
(2)

相对某其他位置,设置输入和/或输出序列的位置指示器。

1) 调用最终导出类的 seekoff(off, dir, which)

2) 此函数的基类版本无效果。导出类可覆写此函数以允许位置指示器的相对寻位。

参数

off - 要设置位置指示器到的相对位置。
dir - 定义要应用相对偏移到的基位置。它能为下列常量之一:
常量 解释
beg 流的开始
end 流的结尾
cur 流位置指示器的当前位置
which - 定义输入和/或输出序列何者有影响。它能为下列常量之一或其组合:
常量 解释
in 影响输入序列
out 影响输出序列

注意

并非所有参数组合都可以合法,细节见 seekoff 的导出类版本。

返回值

1) seekoff(off, dir, which) 的返回值

2) 位置指示器所定义的结果绝对位置。基类版本返回 pos_type(off_type(-1))

 

用绝对寻址重定位输入序列、输出序列或两者中的下一位置指针

std::basic_streambuf::pubseekpos, 
std::basic_streambuf::seekpos

                     ios_base::openmode which = ios_base::in | ios_base::out );

(1)
protected:

virtual pos_type seekpos( pos_type pos,

                          ios_base::openmode which = ios_base::in | ios_base::out);
(2)

 设置输入和/或输出序列的位置指示器为绝对位置。

1) 调用最终导出类的 seekpos(pos, which)

2) 此函数的基类版本无效果。导出类可覆写此函数以允许位置指示器的绝对寻位。

参数

pos - 要设置位置指示器到的绝对位置。
which - 定义输入和/或输出序列何者有效果。它能为下列常量之一或其组合:
常量 解释
in 影响输入序列
out 影响输出序列

返回值

1) seekpos(pos, which) 的返回值

2) 位置指示器所定义的结果绝对位置。基类版本返回 pos_type(off_type(-1)) 。

将缓冲与关联的字符序列同步

std::basic_streambuf::pubsync, 
std::basic_streambuf::sync

int pubsync();

(1)

protected:
virtual int sync();

(2)

同步受控制字符序列(缓冲区)与关联字符序列。

1) 调用最终导出类的 sync()

2) 此函数的基类版本无效果。导出类可覆写此函数以允许将底层设备与缓冲区同步。

对于输出流,这典型地导致写入放置区的内容到关联序列中,即冲入输出缓冲区。对于输入流,这典型地清空获取区并从关联序列重读取,以拾取最近的更改。默认行为(例如 std::basic_stringbuf 中找到者)不会做任何事。

参数

(无)

返回值

1) sync() 的返回值。

2) 成功时返回 ​0​ ,否则返回 -1 。基类版本返回 ​0​ 。

你可能感兴趣的:(c++,标准库模板,basic_streambuf,控制字符序列的输入与输出,寻位)