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 结构
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_error 和 aio_error64 子例程。
返回值
如果 I/O 操作已成功排队,那么 aio_fsync 子例程会将 0 返回到调用进程。 否则,返回-1 并设置errno全局变量来指示错误。
错误代码
| 项 | 描述 |
|---|---|
| 再次 | 由于临时资源限制,请求的异步操作未排队。 |
| EBADF | 由 aiocbp 参数引用的 aiocb 结构的 aio_fildes 成员不是打开以进行写入的有效文件描述符。 |
如果任何排队的 I/O 操作失败, aio_fsync 子例程将返回为 read 和 write 子例程定义的错误条件。 将在异步 fsync 子例程的错误状态下返回该错误,可以使用 aio_error 子例程来检索该错误。