linux Native AIO的使用

Linux提供了一种异步读写文件的接口,通过libaio库实现。在CentOS上安装libaio后,可以使用libaio.h头文件进行编程。然而,AIO方式对文件打开选项有特定要求,如需使用O_DIRECT,这会导致无法利用系统缓存,且读写操作需对齐扇区大小。AIO结合eventfd和epoll可用于事件驱动框架。示例代码如test_aio.c,io_event结构体的res字段表示结果。除了Native AIO,还有Glibc AIO,它通过多线程同步模拟异步操作。相关资源包括多个编程实例和Linux异步IO的详细介绍。
摘要由CSDN通过智能技术生成

linux提供了异步读写磁盘文件的接口,需要先安装libaio(centos上,yum install libaio),才能使用头文件libaio.h;异步IO可以通过eventfd与epoll结合,进而在事件驱动框架中使用。

linux native aio需要针对使用O_DIRECT标识打开的文件,造成如下限制(如果无O_DIRECT标识,在调用io_submit时,会同步完成IO操作):

  • AIO方式(O_DIRECT导致)读写文件时,无法利用操作系统对文件的缓存,只能从磁盘读写
  • 读写缓冲区的地址、读写内容的大小、读写的文件偏移必须是扇区的倍数(通常是512字节)

例子:
test_aio.c

#include<libaio.h>
#include<stdlib.h>
#include<errno.h>
#include<stdio.h>
#include<unistd.h>
#define __USE_GNU 1
#include<fcntl.h>

#define FILEPATH "./test.txt"
int main()
{
    io_context_t context ;
    unsigned  nr_events = 10;

    struct iocb io[2], *p[2]={&io[0], &io[1]};
    struct io_event
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值