用libaio读写文件时遇到的问题

在使用libaio进行文件读写操作时,遇到io_getevents返回错误码-14的问题,提示Bad Address。尽管参数检查无误,但调用io_getevents始终无法正常获取完成的io操作。为了解决这个问题,临时改为在epoll_wait返回后,通过读取eventfd来触发回调函数,使用io_queue_run代替io_getevents。参考链接提供了一个libaio、epoll、eventfd结合使用的实例。
摘要由CSDN通过智能技术生成

最近做了一些libaio的读写文件的相关工作,是一个结合eventfd、libaio、epoll的程序。

碰到了一个问题,就是用io_submit提交io后,利用io_getevents获取完成的io操作数,结果不清楚为什么io_getevents一直返回错误码-14,利用strerror查看,提示Bad Address。

用man查看io_getevents说明,说是io_getevents的参数struct io_event *events, struct timespec *timeout是无效的,但是这两个参数确实是没有问题的,全是局部变量。

其实调用io_getevents一是获取完成的io操作,二是调用回调函数,代码示例如下:

            tms.tv_sec = 0;  
            tms.tv_nsec = 0;  
            r = io_getevents(ctx, 1, NUM_EVENTS, events, &tms);   //在我的程序中,此处的r一直是-14,回调函数一直无法调用
            if (r > 0) {  
                for (j = 0; j < r; ++j) {  
                    ((io_callback_t)(events[j].data))(ctx, events[j].obj, events[j].res, events[j].res2);  
                }

            }  

既然目前问题无法解决,只能暂时回避一下。

不再调用io_getevents,而是当epoll_wait 返回后&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值