【发布时间】:2010-09-23 19:51:14
【问题描述】:
我正在尝试通过具有以下特征的标准输入/标准输出找到非阻塞 IO 的最佳解决方案:
- 只要有足够的数据,就读入 n 大小的块。
- 如果数据不足,则读入部分块。
- 如果没有可用数据,则阻塞直到有一些数据(即使它可能小于 n)。
目标是允许在立即处理“控制”代码的同时高效传输大型数据集(而不是让它们停留在某个部分填充的缓冲区中)。
我知道我可以通过使用线程和 istream::get() 循环来实现这一点,或者通过编写一堆特定于平台的代码(因为您不能 select() 在 Windows 中的文件句柄上)... ((还有 istream::readsome() 似乎很有希望,但我在谷歌上能找到的唯一结果是人们说它实际上并不好用。))
由于我没有使用这些 API 编写过多代码,也许有更好的方法。
【问题讨论】:
标签: c++ pipe stdin iostream nonblocking