将POSIX AIO与文件描述符一起使用时,是否需要在O_NONBLOCK
中用open()
打开文件描述符?
在APUE中,我找不到它明确说是或否的例子,但是在一个示例中,我没有发现O_NONBLOCK
中的open()
打开了这样的文件描述符。
谢谢。
答案 0 :(得分:3)
由于您评论说您不清楚非阻塞I / O和异步I / O之间的关系和区别:
I / O操作不会阻塞,即使没有数据可以立即传输。如果它们传输的数据少于请求的数据(或根本没有传输),则调用者可以根据需要稍后再试。没有任何排队等待后续操作。
POSIX AIO接口提供相对于调用者线程异步执行的I / O操作。当在不同的执行上下文中尝试I / O时,AIO调用返回而无需等待I / O。呼叫者可以安排以各种方式通知操作完成(或不可以)。同时,它可以执行其他所需的工作。
两者之间没有特殊关系。 POSIX规范(例如those for aio_read()
和the Linux manual for the POSIX AIO interfaces)都没有记录要求在其上执行AIO的文件处于非阻塞模式的任何要求,也没有为以下情况定义任何错误条件:在阻止模式下。非阻塞模式不是必需的。
的确,尽管允许,但对非阻塞文件执行AIO甚至不是特别有用。如果您可以依靠您的操作不阻塞,那么异步执行该操作有什么好处? AIO的要点是调用者不必等待,而是执行I / O。