内核aio_linux AIO -- libaio 实现的异步 IO

本文详细介绍了Linux内核AIO(异步IO)的实现,包括libaio库的主要接口,如io_setup、io_destroy、io_submit、io_cancel和io_getevents。还探讨了aio_context_t、iocb和io_event结构,以及内核中的kioctx结构。Linux AIO利用CPU和设备的异步工作,与POSIX AIO不同,它仅支持direct-io。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值