美文网首页
linux异步IO接口libaio

linux异步IO接口libaio

作者: 再凌 | 来源:发表于2020-12-09 14:05 被阅读0次

libaio是异步读写IO的接口

有以下几个操纵的函数

int io_setup(unsigned nr_events,  aio_context_t *ctxp);//注册
int io_destroy(aio_context_t ctx);//销毁
int io_submit(aio_context_t ctx,  long nr,  struct iocb *cbp[]);//提交任务
int io_cancel(aio_context_t ctx,  struct iocb *,  struct io_event *result);//取消
int io_getevents(aio_context_t ctx, long min_nr, long nr, struct io_event *events, struct timespec *timeout);//得到结果

1. int io_setup(unsigned nr_events, aio_context_t *ctxp);

表示驻留在context中的IO总数, aio_context_t是一个long类型

2. int io_submit(aio_context_t ctx, long nr, struct iocb *cbp[])

    struct iocb cb; struct iocb *cbs[1]; //cb是一个临时结构体, cbs是装有一个struct iocb指针的数组
    cb.aio_fildes = fd; 
    cb.aio_lio_opcode = IOCB_CMD_PWRITE;/* command-specific options */ 
/*
IOCB_CMD_PREAD      读; 对应系统调用pread().
IOCB_CMD_PWRITE     写,对应系统调用pwrite().
IOCB_CMD_FSYNC      同步文件数据到磁盘,对应系统调用fsync()
IOCB_CMD_FDSYNC     同步文件数据到磁盘,对应系统调用fdatasync()
IOCB_CMD_PREADV     读,对应系统调用readv()
IOCB_CMD_PWRITEV    写,对应系统调用writev()
IOCB_CMD_NOOP       只是内核使用
*/
    cb.aio_buf = (uint64_t)data; 
    cb.aio_offset = 0; 
    cb.aio_nbytes = 4096; 
    cbs[0] = &cb;

其中的long nr指的是每一个cb的大小

3. int io_getevents(aio_context_t ctx, long min_nr, long nr, struct io_event *events, struct timespec *timeout)

提交任务后可以先处理其他事情, 等到系统完成IO操作后会填充event字段(失败成功均填充). 使用io_getevents去拷贝event.
min_nr代表本次取出的event最小数量 不够则会阻塞, 除非到达timeout时间返回
nr代表最大获取的event数量

取出的所有event放入events内存中

相关文章

  • linux异步IO接口libaio

    libaio是异步读写IO的接口 有以下几个操纵的函数 1. int io_setup(unsigned nr_e...

  • io_uring原理

    简介 io_uring是2019年在linux新增的异步IO接口。 它的出现是为了替代linux的旧的异步IO接口...

  • Netty和NIO-未完待续

    linux底层支持bio(阻塞io),nio(多路复用io),aio(异步非阻塞io),信号io等多种方案; jd...

  • iOS Block异步接口转同步接口的方法

    异步Block接口转为同步接口 1.异步Block接口 通常在遇到本地IO操作,网络请求等情况,我们习惯于使用Bl...

  • python入门开发学习笔记之了解异步IO模型

    本节重点 了解异步IO模型 本节时长需控制在5分钟内 异步IO(Asynchronous I/O) Linux下的...

  • linux内核之异步IO

    一、前言 在嵌入式linux中,除了前面讲到的轮询式IO还有异步IO。异步IO可以在驱动或者文件在处理某一件事情后...

  • Java基础-AIO

    AIO More New IO,或称 NIO.2,随 JDK 1.7 发布,包括了引入异步 IO 接口和 Path...

  • IO解惑:cephfs、libaio与io瓶颈

    最近笔者在对kernel cephfs客户端进行fio direct随机大io读测试时发现,在numjobs不变的...

  • 基本IO模型理解

    写在前面 Linux网络编程中,经常被同步IO,异步IO,阻塞IO,非阻塞IO这些概念混淆!看了一篇博文,概念总结...

  • Java IO快速入门

    网络IO实现方式分为BIO(阻塞IO)、线程池伪异步IO、NIO(非阻塞IO)、AIO(异步非阻塞IO); 异步、...

网友评论

      本文标题:linux异步IO接口libaio

      本文链接:https://www.haomeiwen.com/subject/rochgktx.html