是否需要在open()中使用O_NONBLOCK打开与POSIX AIO一起使用的文件描述符?

时间:2018-08-31 20:19:32

标签: c linux posix aio

将POSIX AIO与文件描述符一起使用时,是否需要在O_NONBLOCK中用open()打开文件描述符?

在APUE中,我找不到它明确说是或否的例子,但是在一个示例中,我没有发现O_NONBLOCK中的open()打开了这样的文件描述符。

谢谢。

1 个答案:

答案 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。