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

问题描述 投票:0回答:1

当使用带文件描述符的POSIX AIO时,是否需要在O_NONBLOCK中使用open()打开文件描述符?

在APUE中,我没有发现它明确地说是或否,但我没有发现在O_NONBLOCK中用open()打开这样的文件描述符。

谢谢。

c linux posix aio
1个回答
3
投票

由于您评论您不清楚非阻塞I / O和异步I / O之间的关系和区别:

  • 即使没有数据可以立即传输,在非阻塞模式下打开的文件的I / O操作也不会阻塞。如果他们传输的数据少于请求的数据(或根本没有传输),那么如果他们愿意,可以由调用者再次尝试。没有什么可以排队等待以后的行动。
  • POSIX AIO接口提供了与调用者线程异步执行的I / O操作。 AIO在不等待I / O的情况下调用return,而在不同的执行上下文中尝试I / O.呼叫者可以安排以各种方式通知操作的完成(或不完成)。与此同时,它可以执行它想要的任何其他工作。

这些之间没有特别的关系。 POSIX规范(例如those for aio_read()the Linux manual for the POSIX AIO interfaces)都没有记录对执行AIO的文件处于非阻塞模式的任何要求,也没有为它处于阻塞模式的情况定义任何错误条件。非阻塞模式不是必需的。

实际上,虽然它是允许的,但在非阻塞文件上执行AIO甚至不是特别有用。如果您可以依靠您的操作不阻止,那么您从异步执行它获得了什么? AIO的要点是调用者不必等待,但执行I / O.

© www.soinside.com 2019 - 2024. All rights reserved.