【发布时间】:2018-02-09 21:27:23
【问题描述】:
根据 Boost.Iostreams 的 boost 参考(在第 3.6 节中,在最底部):
http://www.boost.org/doc/libs/1_64_0/libs/iostreams/doc/index.html
尽管 Boost.Iostreams 过滤器和设备概念可以 适应非阻塞 i/o、C++ 标准库流和 流缓冲区接口不能,因为它们缺乏一种方法 区分临时和永久故障以满足读取 或者写请求
但是,函数std::istream::readsome 似乎是非阻塞的,因为可用字符将立即返回,无需阻塞(RAM 副本除外)等待。我的理解是:
std::istream::read 将阻塞直到eof 或读取的字符数。
std::istream::readsome 将立即返回从内部缓冲区复制的字符。
【问题讨论】:
-
readsome() 并没有做你认为它做的事情。它所做的只是返回已经在内部缓冲但尚未读取的字符。
-
我认为它就是这样做的(也许我的困惑在别处?)。当然这可以被视为非阻塞,而不是等到字符变得可以读取?我会在上面澄清我的理解......
-
来自 cppreference:“这个函数的行为是高度特定于实现的。”
-
@NeilButterworth 我刚刚阅读了本节并将其理解为高度依赖于它将返回多少数据的实现,但它会立即返回
-
我可能是错的,但我的理解是“他们缺乏 [..] 来满足读取或写入请求的手段”和非阻塞
readsome都是正确的,但有没有矛盾,因为readsome没有发出读请求