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

basic_streambuf类是C++标准库中的一个模板类,用于控制字符序列的输入与输出。它管理着输入和输出缓冲区,并且可以关联到不同的字符序列源或池。成员函数包括setbuf用于设置缓冲区,seekoff和seekpos进行位置定位,以及sync同步缓冲区和关联序列。这些功能构成了I/O流对象如std::ifstream和std::stringstream等的基础。
摘要由CSDN通过智能技术生成
定义于头文件 <streambuf>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> 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 实现。

 

成员函数

寻位

调用 setbuf()

std::basic_streambuf<CharT,Traits>::pubsetbuf, 
std::basic_streambuf<CharT,Traits>::setbuf

basic_streambuf<CharT, Traits>* pubsetbuf( char_type* s, std::streamsize n )

(1)

protected:
virtual basic_streambuf<CharT, Traits>* setbuf( char_type* s, std::streamsize n )

(2)

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

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

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

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

2) this

调用 seekoff()

std::basic_streambuf<CharT,Traits>::pubseekoff, 
std::basic_streambuf<CharT,Traits>::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)) 。

 

调用 seekpos()

std::basic_streambuf<CharT,Traits>::pubseekpos, 
std::basic_streambuf<CharT,Traits>::seekpos

pos_type pubseekpos( pos_type pos,
                     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)) 。

 

调用 sync()

std::basic_streambuf<CharT,Traits>::pubsync, 
std::basic_streambuf<CharT,Traits>::sync

int pubsync();

(1)

protected:
virtual int sync();

(2)

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

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

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

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

参数

(无)

返回值

1) sync() 的返回值。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值