我正在尝试理解Linux中的epoll。
正常的操作似乎是:
// Create the epoll_fd
int epoll_fd = epoll_create(10);
...
// Add file descriptors to it
struct epoll_event ev = {0};
ev.events |= EPOLLIN;
ev.data.ptr = ...;
/* for brevity, I don't do error checking here */
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, some_fd, &ev)
我在我的控制台上看到以下错误
root@comp09:~# gem install eventmachine
Building native extensions. This could take a while...
ERROR: Error installing eventmachine:
ERROR: Failed to build gem native extension.
/usr/local/bin/ruby extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... yes
checking for r
通常在linux上,当我们希望使用epoll时,我们首先创建一个epfd,然后将fd和事件注册到它。
int fd=open(...)
int epfd=epoll_create(1);
epoll_event ev,events[1];
ev.data.fd=fd;//already registered
ev.events=EPOLLIN|EPOLLET;
epoll_ctl(epfd,EPOLL_CTL_ADD,fd,&ev);//still need to specify fd?
上面是我在网上发现的一个常见的例子。这是可行的,但问题是:
ev.data
在LINUX上,在对进程核心(由信号6终止)的分析中,stack bt显示:
Core was generated by `/opt/namsam/pac_rrc_qx_e1/bin/rrcprb'.
Program terminated with signal 6, Aborted.
#0 0x0000005555ffb004 in epoll_wait () from /lib64/libc.so.6
(gdb) bt
#0 0x0000005555ffb004 in epoll_wait () from /lib64/libc.so.6
#1 0x000000555
我正在使用Linux工具开发一个用C语言编写的网络应用程序。我确实正在实现我自己的事件循环,是的,我知道有一些库可以帮我实现这一点。然而,这只是一个练习,我_want_自己实现事件循环。
我想知道如何处理错误处理,特别是处理由epoll系统调用返回的错误。我真的应该检查每个返回值吗?因为,在我看来,epoll_ctl返回的一些错误是逻辑错误,而不是运行时错误;我的意思是,我看到epoll_ctl失败的唯一一次是意外地给它喂入了一个非法的epoll文件描述符或其他只有在编写不正确的代码时才会发生的事情。所以我的问题是, epoll_ctl 是否真的会返回一个“运行时错误”,比如,当管道断了时 w