gpt4 book ai didi

linux - 使用 libevent2 处理文件 I/O 时出现问题

转载 作者:IT王子 更新时间:2023-10-29 00:59:15 26 4
gpt4 key购买 nike

我使用 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 而不是 libevent。 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);

首选项列表中的下一个方法是轮询,它完全支持我想要的文件。

谢谢大家的回答。

关于linux - 使用 libevent2 处理文件 I/O 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com