linux libaio介绍

linux libaio介绍Linux 的 I O 机制经历了一下几个阶段的演进 1 同步阻塞 I O 用户进程进行 I O 操作 一直阻塞到 I O 操作完成为止 2 同步非阻塞 I O 用户程序可以通过设置文件描述符的属性 O NONBLOCK I O 操作可以立即返回 但是并不保证 I O 操作成功 3 异步事件阻塞 I O 用户进程可以对 I O 事件进行阻塞 但是 I O 操作并不阻塞 通过 select poll epoll 等函数调用来达到此目的 4 异步时间非阻塞 I O 也叫做异步 I O AIO 用户程序可以通过向内核发出 I O 请求

libaio项目: http://oss.oracle.com/projects/libaio-oracle/

libaio的使用并不复杂,过程为:libaio的初始化,io请求的下发和回收,libaio销毁

一、libaio接口
libaio提供下面五个主要API函数:

int io_setup(int maxevents, io_context_t *ctxp);
int io_destroy(io_context_t ctx);
int io_submit(io_context_t ctx, long nr, struct iocb *ios[]);
int io_cancel(io_context_t ctx, struct iocb *iocb, struct io_event *evt);
int io_getevents(io_context_t ctx_id, long min_nr, long nr, struct io_event *events, struct timespec *timeout);

五个宏定义:

void io_set_callback(struct iocb *iocb, io_callback_t cb);
void io_prep_pwrite(struct iocb *iocb, int fd, void *buf, size_t count, long long offset);
void io_prep_pread(struct iocb *iocb, int fd, void *buf, size_t count, long long offset);
void io_prep_pwritev(struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, long long offset);
void io_prep_preadv(struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, long long offset);

这五个宏定义都是操作struct iocb的结构体。struct iocb是libaio中很重要的一个结构体,用于表示IO,但是其结构略显复杂,为了保持封装性不建议直接操作其元素而用上面五个宏定义操作。
















二、libaio的初始化和销毁

观察libaio五个主要API,都用到类型为io_context的变量,这个变量为libaio的工作空间。不用具体去了解这个变量的结构,只需要了解其相关操作。创建和销毁libaio分别用到io_setup(也可以用io_queue_init,区别只是名字不一样而已)和io_destroy。

int io_setup(int maxevents, io_context_t *ctxp);



 

 

#include


#include


#include
#include


#include


#include








 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224075.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:45
下一篇 2026年3月17日 下午12:45


相关推荐

  • Weka安装及简单应用

    Weka安装及简单应用因为前段时间上课有接触 WEKA 这个软件 写了一个实验报告 特此把它贴出来 希望能对大家有所帮助 一 Weka 介绍 1 Weka 简介 Weka 是怀卡托智能分析环境 WaikatoEnvir 的英文字首缩写 在该网站可以免费下载可运行软件和源代码 还可以获得说明文档 常见问题解答 数据集和其他文献等资源 Weka 是新西兰怀卡托大学用

    2026年3月26日
    2
  • mockjs使用

    mockjs使用1 安装 npminstallmo 安装 axios 是为了能模拟后台接口 2 建立目录结构如下 3 在 main js 引入 mockjs4 mock jsimportMock mockjs 引入 mockjsconstR Mock Random Mo

    2026年3月20日
    2
  • 素数环问题(回溯法)

    素数环问题(回溯法)素数环是一个计算机程序问题 指的是将从 1 到 n 这 n 个整数围成一个圆环 若其中任意 2 个相邻的数字相加 结果均为素数 那么这个环就成为素数环 现在要求输入一个 n 求 n 个数围成一圈有多少种素数环 规定第一个数字是 1 include lt iostream gt include lt math h gt usingnamespa intn 0 inta 100

    2026年3月19日
    2
  • Java零基础学习难吗「建议收藏」

    Java零基础学习难吗「建议收藏」  java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言。并不困难。如果你的学习能力比较高,那么你对Java的理解会更快。而如果你恰巧已经掌握了c或c++语言编程的全部知识,那么学起Java来就会更简单了。但这是没有必要的,如果你的思维逻辑还可以,那么你是可以很好的成为一名Java程序员的。  Java零基础学习难吗?Java是一门直截了当的语言。边练习边学,越多的练习会让你有更大的进步,你会感觉很棒。你会

    2022年6月20日
    39
  • flutter属于前端还是后端(kotlin比较flutter)

    尝试了网上多种库和教程都没办法互解,JAVA代码如下,求个大佬帮忙用dart(Flutter)实现一个可以互解的aes加密代码packagecom.example.lib;importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;public…

    2022年4月9日
    255
  • 程序员每天都在使用的6个惊讶的软技能

    程序员每天都在使用的6个惊讶的软技能

    2022年3月2日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号