我正在尝试寻找一种通过stdin/stdout实现非阻塞IO的最佳解决方案,具有以下特征:
- 只要有足够的数据,就以n字节大小的块来读取。
- 如果没有足够的数据,则读取部分块。
- 如果没有可用的数据,则阻塞直到有一些数据(即使它可能小于n)。
目标是允许大数据集的高效传输,同时立即处理'控制'代码(而不是让它们在某个部分填充的缓冲区中逗留)。
我知道可以通过使用线程和istream::get()循环或编写一堆平台特定的代码来实现这一点(因为你不能在Windows上选择文件句柄)... (还有看起来很有前途的istream::readsome(),但我在谷歌上找到的唯一结果是人们说它实际上并不好用。)
由于我没有使用这些API进行过多的编码,也许有更好的方法。