aio_fsync 子例程

用途

同步异步的文件。

标准 C 库 (libc.a)

语法

#include <aio.h>

int aio_fsync (op, aiocbp)
int op;
struct aiocb *aiocbp;

描述

aio_fsync 子例程异步强制所有 I/O 操作处于同步 I/O 完成状态。 当同步请求已启动或已排队到文件或设备时 (即使无法立即同步数据) ,函数调用将返回。

如果 op 参数设置为 O_DSYNC ,那么所有当前排队的 I/O 操作都将完成,就像通过调用 fdatasync 子例程一样。 如果 op 参数设置为 O_SYNC ,那么所有当前排队的 I/O 操作将如同通过调用 fsync 子例程一样完成。 如果 aio_fsync 子例程失败,或者如果由 aio_fsync 排队的操作失败,那么不保证完成未完成的 I/O 操作。

如果 aio_fsync 成功,那么只有在调用 aio_fsync 时排队的 I/O 才能保证强制进入相关完成状态。 不保证以同步方式完成文件描述符上的后续 I/O。

aiocbp 参数指的是异步 I/O 控制块。 aiocbp 值可用作 aio_error aio_return 子例程的自变量,以便确定异步操作在继续时的错误状态和返回状态。 当请求排队时,操作的错误状态为 EINPROGRESS。 成功传输所有数据后,将重置错误状态以反映操作的成功或失败。 如果操作未成功完成,那么将设置操作的错误状态以指示错误。 aio_sigevent 成员确定在所有操作已实现同步 I/O 完成时要发生的异步通知。 将忽略 aiocbp 参数引用的结构的所有其他成员。 如果 aiocbp 引用的控制块在异步 I/O 完成之前变为非法地址,那么行为未定义。

如果 aio_fsync 子例程失败或 aiocbp 指示错误情况,那么不保证已成功传输数据。

参数

描述
op 确定完成所有当前排队的 I/O 操作的方式。
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_fsync 子例程会将 0 返回到调用进程。 否则,返回-1 并设置errno全局变量来指示错误。

错误代码

描述
再次 由于临时资源限制,请求的异步操作未排队。
EBADF aiocbp 参数引用的 aiocb 结构的 aio_fildes 成员不是打开以进行写入的有效文件描述符。

如果任何排队的 I/O 操作失败, aio_fsync 子例程将返回为 readwrite 子例程定义的错误条件。 将在异步 fsync 子例程的错误状态下返回该错误,可以使用 aio_error 子例程来检索该错误。