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的一个简单例子相关推荐

  1. linux下异步IO的简单例子

    首先,贴一下异步IO中用的的一些结构体,因为平常很少用,整理起来方便查看. aio.h中的struct aiocb struct aiocb{int aio_fildes; /* File desri ...

  2. linux make教程,Linux下makefile的一个简单框架

    目录结构 tree . |-- Makefile `-- src |-- Makefile |-- bar | |-- Makefile | `-- bar.c `-- foo |-- Makefil ...

  3. linux编写一个简单的端口扫描程序,小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2)...

    当前位置:我的异常网» Linux/Unix » 小弟我在linux下写了个简单的多线程端口扫描程序, 小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2) www. ...

  4. 协方差检验用在什么地方_通过一个简单例子,通俗讲下协方差分析

    内容来自:"小白学统计"微信公众号,感谢作者授权. 临床中经常碰到这种设计:研究对象分为两组,接受不同治疗(如治疗组和安慰组),每组分别在治疗前和治疗后测量观察指标(如血压值).目 ...

  5. SAP MM采购定价过程的一个简单例子

    SAP MM采购定价过程的一个简单例子 本文以一个简单的例子阐述了SAP MM模块中采购定价的基本原理.本例中,假定采购订单里输入的是含税采购价,然后系统自动计算出物料最终的采购价格(含税价-税额=采 ...

  6. Linux 下UVCamp;V4L2技术简单介绍(二)

    通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...

  7. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  8. linux使用flask设计网站,linux下Flask框架搭建简单网页

    开始安装FLASK需要创建一个虚拟环境,虚拟环境可以不干扰正在使用的系统环境,避免影响,并且也不需要完全的root权限,更加安全可靠. 搭建环境 Python3.4 进入到microblog目录下创建 ...

  9. Linux 下查看某一个程序所使用的内存方法介绍

    Linux 下查看某一个程序所使用的内存方法介绍 在 Linux 上进行开发和运营维护的时候,免不了要查看某一个程序所占用内存的情况.常用方法总结如下(注意第四种方法): 第一种:ps -aux | ...

  10. 手把手教你如下在Linux下如何写一个C语言代码,编译并运行

    文章目录 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 打开Ubuntu终端 创建 helloworld.c 编译C文件 手把手教你如下在Linux下如何写一个C语言代码,编译并运行 ...

最新文章

  1. php 动态分页,PHP动态分页函数,PHP开发分页必备啦
  2. IOS笔记 #pragma mark的用法
  3. 黄聪:VS2010开发T4模版引擎之基础入门
  4. HRNet-Facial-Landmark-Detection 人脸关键点
  5. 网络编程应用:基于TCP协议【实现文件上传】--练习
  6. php cli spl_autoload_register,PHP spl_autoload_register 自动加载方法浅析
  7. 【Linux】一步一步学Linux——fgrep命令(了解)(51)
  8. 参数变化_风机盘管参数变化对性能造成的影响
  9. 关于计应151/152《软件工程》课程实践的安排
  10. 525 Contiguous Array 连续数组
  11. 资源丨用PyTorch实现Mask R-CNN
  12. ./configure:command not found 解决方法
  13. [转载] python difference用法_set.difference() 的用法(python3)_举例说明python3 set方法功能
  14. c语言用三目运算符从小到大排列,错题集
  15. 一、JAVA基础(数据类型、运算符、变量常量)
  16. python画龙猫_微信小程序支付demo,后端使用python
  17. java工程师的关键绩效指标_绩效考核表(JAVA高级工程师)
  18. Linux禁用文件可执行权限
  19. Ueditor编辑器 .Net 版
  20. 创建图片外链——“极简图床”

热门文章

  1. Source Code Pro一款堪称完美的编程字体
  2. 考研复习 求解函数极限的方法全总结
  3. 【8】黑塞矩阵提取图片关键点
  4. 简图记录-番茄时间管理
  5. imagesc和pcolor区别
  6. DOTween中文详解(持续更新)
  7. sybase数据库与oracle,Oracle访问Sybase数据库的方法
  8. Java 夯实基础之注解
  9. Java之时间格式转换
  10. android 车牌自动识别,Android端车牌识别可以用来实现摄像头扫描识别车牌?