我试图找到最佳解决方案的非IO通过stdin/stdout有以下特点:

  • 只要有足够的数据,在阅读 n-大小的块。
  • 如果没有足够的数据,在部分区块。
  • 如果没有可用的数据,方框直到有一些(即使它也可以比 n).

我们的目标是允许有效转让用于大数据集,同时处理'控制'码立即(而不是让他们萦绕在一些局部填充的缓冲区的地方).

我知道我可以实现这一点通过使用螺纹和istream::get()循环,或者通过编写了一堆的平台特定的代码(因为你不能选择()对文件处理在windows)...((还有istream::readsome()这看来很有希望,但是唯一的结果我可以找到在谷歌的人说这实际上并没有很好的工作。))

因为我没有做过太多的编码w/这些Api,也许有一个更好的办法。

有帮助吗?

解决方案

也许 提升::asio 可以使用你吗?

其他提示

我用螺纹和平特定的代码。看看 我的回答另一个问题.我能把操作系统特定的东西在inputAvailable()(Linux选择使用Windows只是返回true)。然后我可以使用WaitForSingleObject()超时在Windows尝试让在线完成,然后TerminateThread()以杀死它。很丑陋的,但小组没有想要使用此位的提升。

我做了一件类似于jwhitlock...我结束了一个StdinDataIO类绕着适当的操作系统的具体实施(*)使其余的我的程序可以选择()对该文件描述符StdinDataIO提供,其余的开心无知的窗口'的限制关于stdin。看看 在这里,在这里, 如果你喜欢,代码是开放源/BSD获得许可。

(*)的实施是一个简单的通用Linux/MacOSX,并在Windows这是一个相当复杂的过程,设立一个孩子纹读取stdin和发送数据收到过一座回到主线...不很优雅,但它的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top