c - 我需要重新初始化 epoll_wait 的事件数组吗?
问题描述
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);
...
}
解决方案
epoll_wait
返回events
它已写入的 ' 元素的数量,您不应该关心数组的其余部分。所以我会说 - 不,你不需要重新初始化这个数组,甚至不需要初始化它,只要你总是使用第一个nfds
元素。
进一步详细说明:每次调用后,epoll_wait
您肯定知道它填充了数组的第一个nfds
元素events
,因此您必须遍历这些元素以检查哪些事件发生在哪些描述符上。然而,数组中的其余元素events
基本上是来自先前调用或来自该数组分配的任何内存区域的垃圾epoll_wait
,因此所有索引 >= 的元素nfds
都不包含任何有用的数据。
推荐阅读
- xpath - 通过安全代理将抓取的数据导入 Google 表格
- java - application.properties 中的 spring.cache.type=redis 在启动时抛出异常
- c# - ASP.NET MVC - 用逗号分隔数字
- cucumber - 如何从输出结果中忽略部分字符
- android - 在 Android NDK 中构建图形 UI
- networking - 通过网络同时进行千兆位写入
- macos - 如何使用 AppleScript 关闭 Safari 偏好设置窗口?
- excel - 如何使用 IF 以及 AND 和多个 OR 条件创建 Excel 公式
- ajax - 每秒使用 Ajax 请求有多安全
- python - python的subprocess.Popen()实时刷新颜色输出