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 值 timeout 值 |
返回值
返回值是 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 调用。 |