【问题标题】:What's the difference between aio_read and read/EWOULDBLOCK?aio_read 和 read/EWOULDBLOCK 有什么区别?
【发布时间】:2017-12-21 01:29:48
【问题描述】:

在 aio_read 中,我们在 aiocb 结构上使用 aio_error 函数来检查操作是否完成。对我来说,这似乎是轮询,与读取相同,然后检查 EWOULDBLOCK 作为返回值。

【问题讨论】:

  • aiocb 也有aio_sigevent 字段,您可以将其用于回调,因此无需aio_error 进行轮询。
  • 如果您在aio_read 之后立即调用aio_error,那么使用异步io 显然没有意义。实际上,您应该提供一些示例代码以进行说明。

标签: c++ c linux asynchronous io


【解决方案1】:

我们在 aiocb 结构上使用 aio_error 函数来检查操作是否完成。

不,我们没有。我们使用它来检查它是否以错误结束

对我来说,这似乎是轮询,与读取相同,然后检查 EWOULDBLOCK 作为返回值。

没有。如果操作尚未完成,无论是否有错误,它都会异步继续。 EWOULDBLOCK 表示操作已经完成并且没有传输任何数据。

在使用异步 I/O 时,您当然应该“轮询”:您应该只允许完成处理程序运行并让 检查结果是什么。

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多