aio_nwait_timeout 子例程

用途

通过指定超时值来扩展 aio_nwait 子例程的功能。

标准 C 库 (libc.a)。

语法

int aio_nwait_timeout (cnt, nwait, list, timeout)
int cnt;
int nwait;
struct aiocbp **list;
int timeout;

描述

aio_nwait_timeout 子例程等待特定数目的异步 I/O 操作完成,如 nwait 参数指定的那样,或直到调用阻塞了 timeout 参数指定的特定持续时间为止。

参数

描述
Cnt 指示可以复制到 list 数组中的 aiocbp 结构的最大指针数。
list 指向 aio.h 文件中定义的 aio 控制结构的指针数组。
nwait 指定在 aio_nwait_timout 子例程返回之前必须完成的异步 I/O 操作数。
超时 以毫秒为单位指定。

timeout-1 指示子例程的行为与 aio_nwait 子例程一样,阻塞直到所有请求的 I/O 操作完成或直到没有更多异步 I/O 请求从进程暂挂。

timeout0 指示子例程立即返回当前已完成的异步 I/O 请求数。 所有其他正 timeout 值指示子例程必须阻塞,直到达到 timeout 值或请求的异步 I/O 操作数完成为止。

返回值

返回值是 aio_nwait 子例程等待完成的请求总数。 不能超过 cnt。 虽然 nwait 是需要查找的请求量,但返回的实际量可能小于,等于或大于 nwait。 返回值指示要访问的列表数组的数量。

如果 lio_listio 子例程启动的请求数超过 等待 ,并且 Cnt 变量大于 等待,那么返回值可能大于 等待 值。 nwait 参数表示返回值所需的最小值, cnt 是返回的可能最大值。

如果由 lio_listio 子例程启动的某些请求发生在高活动时间,并且缺少可用于请求数的资源,那么返回值可能小于 nwait 值。 在某些请求的 aio 控制块中可能会返回 EAGAIN 返回码 (错误稍后重试) ,但 aio_nwait 子例程不会看到这些请求。 在这种情况下,在调用 aio_nwait 子例程之后,必须使用 aio_error 子例程访问列表上找不到的aiocb 结构地址。 如果发生此情况,您可能需要增加 aio 参数 max 服务器或最大请求数。 增大参数将确保对系统进行正确调整,并且不太可能发生 EAGAIN 错误。 在下列情况下,由于新超时参数的设置,返回值可能小于 nwait 值:
  • timeout > 0 ,在完成 nwait 请求之前发生超时
  • timeout = 0 ,并且在 aio_nwait_timeout 调用时完成的当前请求小于 nwait 参数

如果出现错误,aio_nwait子程序将返回-1值,并设置errno全局变量来标识错误。 可将返回码设置为以下 errno 值:

描述
EBUSY 正在进行 aio_nwait 调用。
EINVAL 应用程序已检索所有 aiocb 指针,但用户缓冲区没有足够的空间用于这些指针。
EINVAL 没有未完成的异步 I/O 调用。