加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 使用libevent2处理文件I / O的问题

发布时间:2020-12-14 01:21:48 所属栏目:Linux 来源:网络整理
导读:我和libevent2合作了一段时间,但通常我用它来处理网络I / O(使用套接字).现在我需要阅读许多不同的文件,所以我也想使用它.我创建了这段代码: int file = open(filename,O_RDONLY);struct event *ev_file_read = event_new(ev_base,file,EV_READ | EV_PERSIS
我和libevent2合作了一段时间,但通常我用它来处理网络I / O(使用套接字).现在我需要阅读许多不同的文件,所以我也想使用它.我创建了这段代码:

int file = open(filename,O_RDONLY);
struct event *ev_file_read = event_new(ev_base,file,EV_READ | EV_PERSIST,read_file,NULL);

if(event_add(ev_file_read,NULL))
        error("adding file event");

不幸的是它不起作用.我在尝试添加事件时收到此消息:

[warn] Epoll ADD(1) on fd 7 failed. Old events were 0; read change was 1 (add); write change was 0 (none): Operation not permitted
adding file event: Operation not permitted

该文件存在并具有读/写权限.

任何人都知道如何使用libevent处理文件IO?我还想到了缓冲事件,但是在API中只有函数bufferevent_socket_new()在这里不适用.

提前致谢.

解决方法

我需要libevent来阅读有关优先级的许多文件.问题在于epoll不是在解放. Epoll不支持常规Unix文件.

为了解决这个问题,我强迫libevent不要使用epoll:

struct event_config *cfg = event_config_new();

event_config_avoid_method(cfg,"epoll");

ev_base = event_base_new_with_config(cfg);  
    event_config_free(cfg);

首选项列表上的下一个方法是poll,它完全支持文件,就像我想要的那样.

谢谢大家的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读