Linux下libaio的一个简单例子
libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
首先推荐两个介绍Linux I/O模型的页面,写的很好:
http://www.ibm.com/developerworks/cn/linux/l-async/
http://www.iteye.com/topic/868702
对于libaio的读写过程简单说来就是你发出一个读写请求,然后你可以开始做其他事情,当读写过程结束时libaio会通知你你的这次请求已经完成(而select模型是告诉你读写已经就绪)。
这里给出一个很简单的小例子,具体函数可以通过man查看:
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<libaio.h>
#include<errno.h>
#include<unistd.h>
int main(void){int output_fd;const char *content="hello world!";const char *outputfile="hello.txt";io_context_t ctx;struct iocb io,*p=&io;struct io_event e;struct timespec timeout;memset(&ctx,0,sizeof(ctx)); if(io_setup(10,&ctx)!=0){//initprintf("io_setup error\n"); return -1; } if((output_fd=open(outputfile,O_CREAT|O_WRONLY,0644))<0){ perror("open error");io_destroy(ctx);return -1; } io_prep_pwrite(&io,output_fd,content,strlen(content),0);io.data=content;if(io_submit(ctx,1,&p)!=1){io_destroy(ctx);printf("io_submit error\n"); return -1; } while(1){timeout.tv_sec=0;timeout.tv_nsec=500000000;//0.5sif(io_getevents(ctx,0,1,&e,&timeout)==1){ close(output_fd);break;} printf("haven't done\n");sleep(1);} io_destroy(ctx);return 0;
}
有关libaio更加详细的内容可以看以下两个页面:
http://tiaozhanshu.com/libaio-api.html
http://lse.sourceforge.net/io/aio.html
转自:https://www.cnblogs.com/aLittleBitCool/archive/2011/10/18/2216646.html
Linux下libaio的一个简单例子相关推荐
- linux下异步IO的简单例子
首先,贴一下异步IO中用的的一些结构体,因为平常很少用,整理起来方便查看. aio.h中的struct aiocb struct aiocb{int aio_fildes; /* File desri ...
- linux make教程,Linux下makefile的一个简单框架
目录结构 tree . |-- Makefile `-- src |-- Makefile |-- bar | |-- Makefile | `-- bar.c `-- foo |-- Makefil ...
- linux编写一个简单的端口扫描程序,小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2)...
当前位置:我的异常网» Linux/Unix » 小弟我在linux下写了个简单的多线程端口扫描程序, 小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2) www. ...
- 协方差检验用在什么地方_通过一个简单例子,通俗讲下协方差分析
内容来自:"小白学统计"微信公众号,感谢作者授权. 临床中经常碰到这种设计:研究对象分为两组,接受不同治疗(如治疗组和安慰组),每组分别在治疗前和治疗后测量观察指标(如血压值).目 ...
- SAP MM采购定价过程的一个简单例子
SAP MM采购定价过程的一个简单例子 本文以一个简单的例子阐述了SAP MM模块中采购定价的基本原理.本例中,假定采购订单里输入的是含税采购价,然后系统自动计算出物料最终的采购价格(含税价-税额=采 ...
- Linux 下UVCamp;V4L2技术简单介绍(二)
通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- linux使用flask设计网站,linux下Flask框架搭建简单网页
开始安装FLASK需要创建一个虚拟环境,虚拟环境可以不干扰正在使用的系统环境,避免影响,并且也不需要完全的root权限,更加安全可靠. 搭建环境 Python3.4 进入到microblog目录下创建 ...
- Linux 下查看某一个程序所使用的内存方法介绍
Linux 下查看某一个程序所使用的内存方法介绍 在 Linux 上进行开发和运营维护的时候,免不了要查看某一个程序所占用内存的情况.常用方法总结如下(注意第四种方法): 第一种:ps -aux | ...
- 手把手教你如下在Linux下如何写一个C语言代码,编译并运行
文章目录 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 打开Ubuntu终端 创建 helloworld.c 编译C文件 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 ...
最新文章
- php 动态分页,PHP动态分页函数,PHP开发分页必备啦
- IOS笔记 #pragma mark的用法
- 黄聪:VS2010开发T4模版引擎之基础入门
- HRNet-Facial-Landmark-Detection 人脸关键点
- 网络编程应用:基于TCP协议【实现文件上传】--练习
- php cli spl_autoload_register,PHP spl_autoload_register 自动加载方法浅析
- 【Linux】一步一步学Linux——fgrep命令(了解)(51)
- 参数变化_风机盘管参数变化对性能造成的影响
- 关于计应151/152《软件工程》课程实践的安排
- 525 Contiguous Array 连续数组
- 资源丨用PyTorch实现Mask R-CNN
- ./configure:command not found 解决方法
- [转载] python difference用法_set.difference() 的用法(python3)_举例说明python3 set方法功能
- c语言用三目运算符从小到大排列,错题集
- 一、JAVA基础(数据类型、运算符、变量常量)
- python画龙猫_微信小程序支付demo,后端使用python
- java工程师的关键绩效指标_绩效考核表(JAVA高级工程师)
- Linux禁用文件可执行权限
- Ueditor编辑器 .Net 版
- 创建图片外链——“极简图床”