在STL中没有basic_ostream的写入函数的原因是什么?

时间:2012-09-17 11:23:24

标签: c++ stl network-programming iostream

在网络库上工作的时候,我最近注意到,对于异步I / O,使用basic_streambuf :: in_avail和一个writeome函数的挂件非常方便。

如果有任何功能可以满足这些要求,我已经搜索了网页并检查了几个C ++引用,但似乎我没有运气。提到类似功能的唯一来源是Boost's Asio库,但是描述清楚地说明函数调用将阻塞,直到至少发送一个字节,这不反映我想要的行为。

为了详细说明我的问题,我根据C ++ N3337出版物创建了草稿。

  

27.6.3.2.5放置区域[streambuf.pub.put]

     

streamsize in_depart();

     

返回:如果写入位置可用,则返回epptr() - pptr()。除此以外   返回showmanycp()

     

27.6.3.4.5放置区域[streambuf.virt.put]

     

streamsize showmanycp();

     

返回:可以写入序列的字符数估计值,   或-1。如果它返回正值,则不会连续调用overflow()   返回traits::eof(),直到至少写入该字符数为止   流。如果showmanycp()返回-1,则对overflow()的调用将失败。

     

默认行为:返回零。

     

备注:使用traits::eof()

     

27.7.3.7未格式化的输出函数[ostream.unformatted]

     

streamsize writesome(char_type* s, streamsize n);

     

效果:表现为无格式输出函数(如27.7.3.7中所述)   1)。构建哨兵对象后,!good()可以调用setstate(failbit)   抛出异常,然后返回。否则写n指定的s个字符。如果   rdbuf()->in_depart() == -1,调用setstate(badbit)(可能会抛出   ios_base::failure(27.5.5.4)),并且不写任何字符;

     

- 如果rdbuf()->in_depart() == 0,则不写任何字符。

     

- 如果rdbuf()->in_depart() > 0,则写入min(rdbuf()->in_depart(), n))个字符。

     

返回:写入的字符数。

0 个答案:

没有答案