我和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()在这里不适用.
提前致谢.
我编写通过Linux TCP套接字进行通信的网络应用程序.最近我注意到发送系统调用崩溃我的应用程序.当两个对手都启动时,它工作正常(我现在正在测试崩溃恢复).但是当一个对等体出现故障时,第二次崩溃会执行这段代码.
fprintf(stderr, "out_tcp %d\n", out_tcp);
if(send(out_tcp, &packet, sizeof(packet), 0) == -1)
fprintf(stderr, "send TCP error");
fprintf(stderr, "after send");
Run Code Online (Sandbox Code Playgroud)
Socket已准备好并已连接,并且在第二个对等体出现故障之前已执行多次.我希望这段代码返回-1值,但它只在输出上产生"out_tcp 11"然后应用程序退出.没有错误消息,没有发送的返回值.我在Valgrind下运行它,它说应用程序正常退出 - 没有错误/警告消息.
有谁知道如何调试它?使用工具?因为我没有信息,所以我非常坚持这一点.
在此先感谢哈嫩