har*_*nen 4 linux file libevent
我和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");
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用.我在尝试添加事件时收到此消息:
[警告] fd 7上的Epoll ADD(1)失败了.旧事件为0; 读取更改为1(添加); 写入更改为0(无):不允许添加文件事件的操作:不允许操作
该文件存在并具有读/写权限.
任何人都知道如何使用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);
Run Code Online (Sandbox Code Playgroud)
首选项列表上的下一个方法是poll,它完全支持文件,就像我想要的那样.
谢谢大家的答案.