POSIX AIO 是在用户控件模拟异步 IO 的功能,不需要内核支持,而 linux AIO 则是 linux 内核原声支持的异步 IO 调用,行为更加低级
关于 linux IO 模型及 AIO、POSIX AIO 的简介,请参看:
libaio 实现的异步 IO 主要包含以下接口:
libaio 实现的异步 IO
函数
功能
原型
io_setup
创建一个异步IO上下文(io_context_t是一个句柄)
int io_setup(int maxevents, io_context_t *ctxp);
io_destroy
销毁一个异步IO上下文(如果有正在进行的异步IO,取消并等待它们完成)
int io_destroy(io_context_t ctx);
io_submit
提交异步IO请求
long io_submit(aio_context_t ctx_id, long nr, struct iocb **iocbpp);
io_cancel
取消一个异步IO请求
long io_cancel(aio_context_t ctx_id, struct iocb *iocb, struct io_event *result);
io_getevents
等待并获取异步IO请求的事件(也就是异步请求的处理结果)
long io_getevents(aio_context_t ctx_id, long min_nr, long nr, struct io_event *events, struct timespec *timeout);
iocb 结构
struct iocb主要包含以下字段:
struct iocb
{
/*
* 请求类型
* 如:IOCB_CMD_PREAD=读、IOCB_CMD_PWRITE=写、等
*/
__u16 aio_lio_opcode;
/*
* 要被操作的fd
*/
__u32 aio_fildes;
/*
* 读写操作对应的内存buffer
*/
__u64 aio_buf;
/*
* 需要读写的字节长度
*/
__u64 aio_n