aio_error 或 aio_error64 子例程

aio_erroraio_error64 子例程包含 POSIX AIO aio_error 子例程 (如 IEEE std 1003.1-2001中所定义) 和 Legacy AIO aio_error 子例程的信息。

POSIX AIO aio_error 子例程

用途

检索异步 I/O 操作的错误状态。

标准 C 库 (libc.a)

语法

#include <aio.h>

int aio_error (aiocbp)
const struct aiocb *aiocbp;

描述

aio_error 子例程返回与 aiocb 结构相关联的错误状态。 此结构由 aiocbp 参数引用。 异步 I/O 操作的错误状态是将由相应的 readwritefsync 子例程设置的同步 I/O errno 值。 如果子例程尚未完成,那么错误状态等于 EINPROGRESS

参数

描述
aiocbp 指向与 I/O 操作关联的 aiocb 结构。

aiocb 结构

aiocb 结构在 /usr/include/aio.h 文件中定义,并包含以下成员:
int               aio_fildes
off_t             aio_offset
char             *aio_buf
size_t            aio_nbytes
int               aio_reqprio
struct sigevent   aio_sigevent
int               aio_lio_opcode

执行环境

只能从进程环境调用 aio_erroraio_error64 子例程。

返回值

如果异步 I/O 操作已成功完成,那么 aio_error 子例程将返回 0。 如果失败,将返回错误状态 (如 readwritefsync 子例程所述)。 如果异步 I/O 操作尚未完成,那么将返回 EINPROGRESS

错误代码

描述
EINVAL aiocbp 参数不引用尚未检索其返回状态的异步操作。

旧 AIO aio_error 子例程

用途: 检索异步 I/O 请求的错误状态。

库 (旧 AIO aio_error 子例程)

标准 C 库 (libc.a)

语法 (旧 AIO aio_error 子例程)

#include <aio.h>
int
aio_error(
handle)
aio_handle_t handle;
int aio_error64(handle)
aio_handle_t handle;

描述 (旧 AIO aio_error 子例程)

aio_error 子例程检索与 handle 参数关联的异步请求的错误状态。 错误状态是将由相应 I/O 操作设置的 errno 值。 如果 I/O 操作仍在进行中,那么错误状态为 EINPROG

aio_error64 子例程类似于 aio_error 子例程,只是它检索与 aiocb64 控制块关联的错误状态。

注: 当使用 aio.h 编译具有旧 AIO 函数定义的 aio 应用程序时,必须定义 aio.h 中使用的 _AIO_AIX_SOURCE 宏。 使用 aio.h 文件进行的缺省编译适用于具有 POSIX AIO 定义的应用程序。 在源文件中输入:
#define _AIO_AIX_SOURCE
#include <sys/aio.h>
或者,在编译时在命令行上输入:
->xlc ... -D_AIO_AIX_SOURCE ... legacy_aio_program.c 

参数 (旧 AIO aio_error 子例程)

描述
句柄 (handle) 由先前调用 aio_readaio_read64aio_writeaio_write64lio_listioaio_listio64 子例程设置的 aio 控制块 (aiocbaiocb64) 结构的句柄字段。 如果传入了随机内存位置,那么将返回随机结果。

aiocb 结构

aiocb 结构在 /usr/include/aio.h 文件中定义,并包含以下成员:
struct aiocb
{
       int                 aio_whence;
       off_t               aio_offset;
       char                *aio_buf;
       ssize_t             aio_return;
       int                 aio_errno;
       size_t              aio_nbytes;
       union {
              int          reqprio;
              struct {
                     int   version:8;
                     int   priority:8;
                     int   cache_hint:16;
              } ext;
       } aio_u1;
       int                 aio_flag;
       int                 aio_iocpfd;
       aio_handle_t        aio_handle;
}

#define aio_reqprio        aio_u1.reqprio
#define aio_version        aio_u1.ext.version
#define aio_priority       aio_u1.ext.priority
#define aio_cache_hint     aio_u1.ext.cache_hint

执行环境 (旧 AIO aio_error 子例程)

只能从进程环境调用 aio_erroraio_error64 子例程。

返回值 (旧 AIO aio_error 子例程)

描述
重大安全事件数量 指示操作已成功完成。
ECANCELED 指示由于 aio_cancel 子例程调用而取消了 I/O 请求。
EINPROG 指示 I/O 请求尚未完成。

aio_readaio_writelio_listio 子例程中描述的 errno 值: 指示操作未成功排队。 例如,如果在调用aio_read子程序时使用了一个不可用的文件描述符,它(aio_read)就会返回-1的值,并将errno全局变量设置为EBADF。 使用不成功的 aio 控制块 (aiocb) 结构的句柄对 aio_error 子例程的后续调用返回 EBADF

相应 I/O 操作的 errno 值: 指示操作已成功启动,但实际 I/O 操作未成功。 例如,对位于完整文件系统中的文件调用 aio_write 子例程将返回值 0 ,这指示请求已成功排队。 但是,当 I/O 操作完成时 (即,当 aio_error 子例程不再返回 EINPROG时) , aio_error 子例程返回 ENOSPC。 这指示 I/O 失败。