我是否需要重新初始化epoll_wait的事件数组?

时间:2019-08-15 11:05:23

标签: c epoll

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);
...
}

1 个答案:

答案 0 :(得分:2)

epoll_wait返回您已写入的events'个元素的数量,您不必理会数组的其余部分。因此,我想说-不,您不必重新初始化此数组,甚至不需要初始化它,只要您始终使用前nfds个元素即可。

进一步详细说明:在每次调用epoll_wait之后,您肯定知道它填充了nfds数组的前events个元素,因此您必须遍历这些元素检查哪些事件在哪个描述符处发生。但是,events数组中的其余元素基本上是来自先前的epoll_wait调用或分配给该数组的任何内存区域中的垃圾,因此所有索引> = {{1} }不包含任何有用的数据。