加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

stdin / stdout / stderr上的跨平台(linux / Win32)非阻塞C IO

发布时间:2020-12-14 02:19:19 所属栏目:Linux 来源:网络整理
导读:我正在尝试通过stdin / stdout找到非阻塞IO的最佳解决方案,具有以下特征: 只要有足够的数据,就可以读入n个大小的块. 如果没有足够的数据,请读取部分块. 如果没有可用数据,则阻塞直到有一些数据(即使它可能小于n). 目标是允许有效传输大型数据集,同时立即处
我正在尝试通过stdin / stdout找到非阻塞IO的最佳解决方案,具有以下特征:

>只要有足够的数据,就可以读入n个大小的块.
>如果没有足够的数据,请读取部分块.
>如果没有可用数据,则阻塞直到有一些数据(即使它可能小于n).

目标是允许有效传输大型数据集,同时立即处理“控制”代码(而不是让它们在某处部分填充的缓冲区中逗留).

我知道我可以通过使用线程和istream :: get()循环,或者通过编写一堆特定于平台的代码来实现这一点(因为你不能在windows中的文件句柄上选择())…((那里也是istream :: readsome()似乎很有希望,但我在谷歌上找到的唯一结果是人们说它实际上并不能很好地工作.))

由于我没有用这些API做过多编码,也许还有更好的方法.

解决方法

也许 boost::asio对你有用吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读