linux支持异步io吗,Linux 异步IO

io_submit、io_setup和io_getevents示例

[摘要:注:本宣布正在 io_submit、io_setup战io_getevents战LINUX上的AIO体系挪用。那有一个特别很是迥殊注重的中央——传送给io_setup的aio_context参数必需初初化为0,正在它的man脚册里实在有解释]

注:原发表在Hadoop技术论坛

io_submit、io_setup和io_getevents和LINUX上的AIO系统调用。这有一个非常特别注意的地方——传递给io_setup的aio_context参数必须初始化为0,在它的man手册里其实有说明,但容易被忽视,我就犯了这个错误,man说明如下: ctxp must not point to an AIO context that already exists, and must be initialized to 0 prior to the call

完整示例如下:// 包含必须头文件

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main()

{

io_context_t ctx;

unsigned nr_events = 10;

memset(&ctx, 0, sizeof(ctx)); // It's necessary,这里一定要的

int errcode = io_setup(nr_events, &ctx);

if (errcode == 0)

printf("io_setup successn");

else

printf("io_setup error: :%d:%sn", errcode, strerror(-errcode));

// 如果不指定O_DIRECT,则io_submit操作和普通的read/write操作没有什么区别了,将来的LINUX可能

// 可以支持不指定O_DIRECT标志

int fd = open("./direct.txt", O_CREAT|O_DIRECT|O_WRONLY, S_IRWXU|S_IRWXG|S_IROTH);

printf("open: %sn", strerror(errno));

char* buf;

errcode = posix_memalign((void**)&buf, sysconf(_SC_PAGESIZE), sysconf(_SC_PAGESIZE));

printf("posix_memalign: %sn", strerror(errcode));

strcpy(buf, "hello xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

struct iocb *iocbpp = (struct iocb *)malloc(sizeof(struct iocb));

memset(iocbpp, 0, sizeof(struct iocb));

iocbpp[0].data = buf;

iocbpp[0].aio_lio_opcode = IO_CMD_PWRITE;

iocbpp[0].aio_reqprio = 0;

iocbpp[0].aio_fildes = fd;

iocbpp[0].u.c.buf = buf;

iocbpp[0].u.c.nbytes = page_size;//strlen(buf); // 这个值必须按512字节对齐

iocbpp[0].u.c.offset = 0; // 这个值必须按512字节对齐

// 提交异步操作,异步写磁盘

int n = io_submit(ctx, 1, &iocbpp);

printf("==io_submit==: %d:%sn", n, strerror(-n));

struct io_event events[10];

struct timespec timeout = {1, 100};

// 检查写磁盘情况,类似于epoll_wait或select

n = io_getevents(ctx, 1, 10, events, &timeout);

printf("io_getevents: %d:%sn", n, strerror(-n));

close(fd);

io_destroy(ctx);

return 0;

}

测试环境:Linux 2.6.16,SUSE Linux Enterprise Server 10 (x86_64)

struct iocb {

/* these are internal to the kernel/libc. */

__u64 aio_data; /* data to be returned in event's data */用来返回异步IO事件信息的空间,类似于epoll中的ptr。

__u32 PADDED(aio_key, aio_reserved1); /* the kernel sets aio_key to the req # */

/* common fields */

__u16 aio_lio_opcode; /* see IOCB_CMD_ above */

__s16 aio_reqprio; // 请求的优先级

__u32 aio_fildes; // 文件描述符

__u64 aio_buf; // 用户态缓冲区

__u64 aio_nbytes; // 文件操作的字节数

__s64 aio_offset; // 文件操作的偏移量

/* extra parameters */

__u64 aio_reserved2; /* TODO: use this for a (struct sigevent *) */

__u64 aio_reserved3;

}; /* 64 bytes */

struct io_event {

__u64 data; /* the data field from the iocb */ // 类似于epoll_event中的ptr

__u64 obj; /* what iocb this event came from */ // 对应的用户态iocb结构体指针

__s64 res; /* result code for this event */ // 操作的结果,类似于read/write的返回值

__s64 res2; /* secondary result */

};

系统调用功能原型io_setup为当前进程初始化一个异步IO上下文int io_setup(unsigned nr_events,aio_context_t *ctxp);io_submit提交一个或者多个异步IO操作int io_submit(aio_context_t ctx_id,long nr, struct iocb **iocbpp);io_getevents获得未完成的异步IO操作的状态int io_getevents(aio_context_t ctx_id, long min_nr, long nr, struct io_event *events, struct timespec *timeout);io_cancel取消一个未完成的异步IO操作int io_cancel(aio_context_t ctx_id, struct iocb *iocb, struct io_event *result);io_destroy从当前进程删除一个异步IO上下文int io_destroy(aio_context_t ctx);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二元相图软件_FactSage 软件教程 入门学习资料汇总

(一)英文版的学习资料(1)FactSage官网:http://www.factsage.com/打开FactSage官网,如下图所示,点击左侧FactSage界面上的模块按钮即可查看其使用方法。点击右侧的链接"Free FactSage Demo …

bufferreader readline一次读一行_python中read(),readline(),readlines()的区别

读取文件的三个方法:read()、readline()、readlines()。三种方法均可接受一个变量size,用于限制每次读取的数据量,也就是说从文件当前位置起读取size个字节;若无参数size,则表示读取至文件结束为止。接下来总结下三种读…

linux shell express,Linux下使Shell 命令脱离终端在后台运行

在Linux下,如果你要执行的shell命令耗时特别长,并且:(1)你的网络不稳定,随时可能断网;或者(2)你在执行了shell命令之后必须要关闭终端软件(例如SecureCRT)。你是否遇到过这样的情况:从终端软件登录远程的Li…

固定 顶部_一楼小院想建阳光房?固定的怕违建,那这样可伸缩的阳光房怎么样...

今天小编又有一个新鲜出炉的案例要跟大家分享啦!前几次与大家分享的都是伸缩阳光房顶,不论是手动还是电动款式 ,似乎都是针对天井、下沉式庭院等设计的。那针对一些小区里的一楼小院,固定的怕违建,有没有什么对策呢&am…

C语言坐标打飞机,C语言控制台实现打飞机小游戏

本文实例为大家分享了C语言实现打飞机小游戏的具体代码,供大家参考,具体内容如下初学C语言总觉得不能做些什么好玩的,这个小游戏只需 “一点点” (千真万确)C语言知识就能完成!总计不到200行的非空白代码(没有强行压缩行数)操作说…

jquery 获取键值对中最大值_jQuery的AJAX发送数据键值对

在我的aspx页面,我对JS是这样的: -jQuery的AJAX发送数据键值对$("#btnLoad").click(function() {var dataForAjax "{datakey:hello}"$.ajax({type: "POST",url: "Ajax__Demo.aspx/SendFile",data: dataForAjax…

一般最小二乘法 c语言,最小二乘法C语言的实现(7页)-原创力文档

实验三 .最小二乘法C语言的实现1.实验目的:进一步熟悉曲线拟合的最小二乘法。掌握编程语言字符处理程序的设计和调试技术。2.实验要求:输入:已知点的数目以及各点坐标 。输出:根据最小二乘法原理以及各点坐标求出拟合曲线 。3.程序…

合同相似可逆等价矩阵的关系及性质_行列式的性质问题

行列式的学习一方面要掌握计算行列式的一般方法;对性质要理解。考点与要求:了解:行列式的概念、方阵的乘积、行列式的性质;掌握:行列式的性质;会用:行列式的性质和行列式按行(列)展开定理计算行…

查找整数c语言编程,关于算法:查找整数的位数

查找正整数的位数的最佳方法是什么?我发现了这3种基本方法:转换为字符串String s new Integer(t).toString();int len s.length();for循环for(long long int temp number; temp > 1;){temp/10;decimalPlaces;}对数计算digits floor( log10( numbe…

c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版

本系列历史文章目录:ESP32概述与Arduino软件准备新冠肺炎疫情数据实时显示器B 粉计数器本期给大家带来的案例是:蓝牙翻页笔。先来看一下演示视频吧:蓝牙翻页笔 | PPT播放控制器 | 蓝牙键盘 | 用 Arduino 玩转掌控板 ESP32 / ESP8266 | 图形化…

c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...

兰州交通大学博文学院《C语言程序设计》课 程 设 计 报 告系 别: 交通运输系班 级: 16交通运输(3)班姓 名:学 号:指导老师:2018年1月5日兰州交通大学博文学院交通运输系课程设计成绩评定表学生姓名班 级学 号导师姓名职…

python 程序运行在阿里云主机_阿里云主机Access key利用工具

简介(Gamma实验室核心成员:一灯老和尚所写)在日常渗透过程中我们经常遇到信息泄露出ALIYUN_ACCESSKEYID与ALIYUN_ACCESSKEYSECRET(阿里云API key),特别是laravel框架得debug信息。APP中也会泄露这些信息&am…

c语言中case1 case3 n =1,(n 1)-Step Derivations on n-Groupoids: The Case n = 3

摘要:We define a ranked trigroupoid as a natural followup on the idea of a ranked bigroupoid. We consider the idea of a derivation on such a trigroupoid as representing a two-step process on a pair of ranked bigroupoids where the mapping d is a …

输入数字存入数组C语言,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个数。#include#include#include#includeint sum_num(char [],int []);int cou_num(char [][81],int,int[]);int txt(char [][81],int);//主函数m…

一张纸厚度是多少毫米_一张纸的威力有多大?纸折103次捅破宇宙,理论荒诞却无法反驳...

【图文摘自网络,如有侵权请联系删除】人类达到月球需要多久时间?地球和月亮的距离不是一成不变的,它有着近地点和远地点,地球里月球最远的距离在363300千米,最远为405500千米。而当年阿波罗号由火箭发射到登陆月球表面…

c语言中结构体类型只有,C语言中main()函数不要返回结构体类型(求助)

大家先看一下这段程序:#include typedef unsigned char bool;typedef struct _person person;struct _person {bool sex;};person main() {person xingwang;xingwang.sex 0;return xingwang;}如此简单清晰的程序,您觉得会报错吗?如果您和我一…

oracle 两表两列数据对比_Oracle、PostgreSQL与Mysql数据写入性能对比

最近因为工作需要,需要对Oracle和Mysql写入性能进行对比,以前都是听说Mysql性能比Oracle不是一个级别,现在亲测后,不比不知道,一比吓一跳。。。追加PostgreSql性能测试数据测试场景本地电脑(单机),通过程序…

锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!

点击蓝字关注我哦辛苦付出、苦熬实干,换来了硕果累累、丰收成片。回首2020年,锐驰秉承着锐意进取、快速创新的理念,在自动化道路上不断探索,推出了多款智能自动化机器,现在着重介绍以下3款:异型插件机器人、…

c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

gd工程职业技术学院毕业论文基于C语言的推箱子游戏设计Design of the push box Based on Combined Language作者姓名:学科专业: 应用电子技术学院(系部): 机电工程系指导教师:gd工程职业技术学院2013年1月摘要近年来随着科技的飞速…

学生管理系统c#语言代码,基于C#语言的学生管理系统的设计(ASP.NET2.0)

摘 要随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生管理系统是学校管理中不可少的一部分。而基于B/S架构的学生管理系统是方便学校管理,实行电子办公的必要组成部分&#xf…