c - 与 POSIX AIO 一起使用的文件描述符是否需要在 `open()` 中使用 `O_NONBLOCK` 打开?
问题描述
将 POSIX AIO 与文件描述符一起使用时,是否需要使用O_NONBLOCK
in打开文件描述符open()
?
O_NONBLOCK
在 APUE 中,我没有发现它明确地说是或否,但我没有发现在open()
一个示例中打开了这样的文件描述符。
感谢。
解决方案
由于您评论说您不清楚非阻塞 I/O 和异步 I/O 之间的关系和区别:
以非阻塞模式打开的文件的 I/O 操作不会阻塞,即使没有数据可以立即传输。如果他们传输的数据少于请求的数据(或根本没有),那么如果他们愿意,则由调用者稍后再试。没有任何东西排队等待以后的操作。
POSIX AIO 接口提供了相对于调用者线程异步执行的 I/O 操作。AIO 调用在不等待 I/O 的情况下返回,而在不同的执行上下文中尝试该 I/O。调用者可以安排以各种方式通知操作完成(或不完成)。与此同时,它可以执行它想要的任何其他工作。
这些之间没有特别的关系。POSIX 规范(例如 POSIX 规范)和aio_read()
POSIX AIO 接口的 Linux 手册都没有记录执行 AIO 的文件处于非阻塞模式的任何要求,也没有定义任何错误条件在阻塞模式。非阻塞模式不是必需的。
实际上,尽管允许,但在非阻塞文件上执行 AIO 甚至不是特别有用。如果您可以依靠您的操作不阻塞,那么您从异步执行它中获得什么?AIO的要点是调用者不必等待,而是执行I/O。
推荐阅读
- c# - 我在 ionic 中使用了 api,但我遇到了一些问题。你能解释一下我们如何在 ionic 中使用 api 吗?
- c# - 比较两个整数数组以进行值比较的最快方法
- c - 如何使用 CMakeLists.txt 创建一个库并将其包含在另一个程序中?
- math - 了解 Houdini 地形生成数学
- c# - 从测试中在后台运行 dotnet 控制台
- java - 无法在 Sonar 中解析“应使用本地静态 DTD 解析不受信任的 XML”
- android - Android Studio 3.4 Manifest 合并失败:uses-sdk:minSdkVersion 1 不能小于版本 14
- python - odoo 8 onchange for quant in stock move
- php - 发送 Guzzle 的“异步”请求而不调用“等待”
- google-apps-script - 使用开关“数据验证”隐藏基于单元格值的行 -> 项目列表