ceph存储 Linux下libaio的一个简单例子
来源:互联网 发布:软件系统管理员手册 编辑:程序博客网 时间:2024/05/29 12:16
libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
首先推荐两个介绍Linux I/O模型的页面,写的很好:
http://www.ibm.com/developerworks/cn/linux/l-async/
http://www.iteye.com/topic/868702
对于libaio的读写过程简单说来就是你发出一个读写请求,然后你可以开始做其他事情,当读写过程结束时libaio会通知你你的这次请求已经完成(而select模型是告诉你读写已经就绪)。
这里给出一个很简单的小例子,具体函数可以通过man查看:
1 #include<stdio.h> 2 #include<fcntl.h> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<libaio.h> 6 #include<errno.h> 7 #include<unistd.h> 8 int main(void){ 9 int output_fd;10 const char *content="hello world!";11 const char *outputfile="hello.txt";12 io_context_t ctx;13 struct iocb io,*p=&io;14 struct io_event e;15 struct timespec timeout;16 memset(&ctx,0,sizeof(ctx)); 17 if(io_setup(10,&ctx)!=0){//init18 printf("io_setup error\n"); 19 return -1; 20 } 21 if((output_fd=open(outputfile,O_CREAT|O_WRONLY,0644))<0){ 22 perror("open error");23 io_destroy(ctx);24 return -1; 25 } 26 io_prep_pwrite(&io,output_fd,content,strlen(content),0);27 io.data=content;28 if(io_submit(ctx,1,&p)!=1){29 io_destroy(ctx);30 printf("io_submit error\n"); 31 return -1; 32 } 33 while(1){34 timeout.tv_sec=0;35 timeout.tv_nsec=500000000;//0.5s36 if(io_getevents(ctx,0,1,&e,&timeout)==1){ 37 close(output_fd);38 break;39 } 40 printf("haven't done\n");41 sleep(1);42 } 43 io_destroy(ctx);44 return 0;45 }
有关libaio更加详细的内容可以看以下两个页面:
http://tiaozhanshu.com/libaio-api.html
http://lse.sourceforge.net/io/aio.html
0 0
- ceph存储 Linux下libaio的一个简单例子
- linux下cppunit的一个简单的例子
- Linux下异步IO(libaio)的使用以及性能
- Linux下原生异步IO接口Libaio的用法
- 一个简单的Linux下Client/Server应答例子
- linux下对信号量测试的一个简单例子
- 一个简单的Linux下Client/Server应答例子
- ceph存储 linux下扩展属性EA
- ceph存储 centos下添加多个虚拟ip地址的方法(一个网卡)
- 一个关于linux socket的简单例子
- 一个关于linux socket的简单例子
- 一个关于linux socket的简单例子
- linux 一个简单的进程创建例子
- 一个简单的存储过程使用事务的例子
- 一个简单的mysql存储过程的例子
- ceph存储 Linux下程序问题的定位和gdb命令行参数大全
- ceph存储 centos下通过Linux的ACL命令学习ACL权限分配原理
- ceph存储 git查看某个文件修改历史Linux下的命令
- Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
- 编程杂谈------hibernate
- 1、如何自学Struts2之Struts2架构和环境搭建[视频]
- Apache Solr 项目名称英文全称
- Tomcat 每天生成 catalina.out
- ceph存储 Linux下libaio的一个简单例子
- ceph存储 深入浅出异步I/O模型
- Web开发中致命的8个小错误
- IBM与物联网
- 2、如何自学Struts2之Struts2例子实践[视频]
- ceph存储 使用异步I/O大大提高应用程序的性能
- JAVA学习笔记42——TreeSet、TreeMap应用+collections模拟斗地主洗牌
- 某B公司面试
- for标签之遍历书包,显示数据列表