1)我有epoll_wait(..., events, ...)
循环,是否需要在每次迭代之前重新初始化事件数组?
2)根据epoll()
的手动示例,这是没有必要的吗?
3)我还没有处理过的fds会在下一次迭代时重新写入数组吗? (我正在使用级别触发的epoll)我会不会错过现成的fds?
我尝试读取内核代码,以检查它是在每次迭代时覆盖数组还是仅添加数组,但没有成功(如果可以显示给我,那会很好)。
struct epoll_event ev, events[MAX_EVENTS];
...
for (;;) {
nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
...
}
答案 0 :(得分:2)
epoll_wait
返回您已写入的events
'个元素的数量,您不必理会数组的其余部分。因此,我想说-不,您不必重新初始化此数组,甚至不需要初始化它,只要您始终使用前nfds
个元素即可。
进一步详细说明:在每次调用epoll_wait
之后,您肯定知道它填充了nfds
数组的前events
个元素,因此您必须遍历这些元素检查哪些事件在哪个描述符处发生。但是,events
数组中的其余元素基本上是来自先前的epoll_wait
调用或分配给该数组的任何内存区域中的垃圾,因此所有索引> = {{1} }不包含任何有用的数据。