nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
if (nfds == -1) {
perror("epoll_pwait");
exit(EXIT_FAILURE);
}
/*why it traverses the event array from 0 to nfds*/
for (n = 0; n < nfds; ++n) {
do_use_fd(events[n].data.fd);
}
该代码是
epoll
手册页的示例,如果成功,epoll_wait
返回准备用于请求的I / O的文件描述符的数量。但是我不知道为什么它将遍历事件数组从0到nfds。 epoll_wait
是否为事件数组排序,并使数组的0到nfds准备好进行读取或写入,而其他则不行? 最佳答案
epoll_wait()将用有关就绪fd的数据填充事件数组的前nfds个元素。其余的MAX_EVENTS-nfds元素不会被触及,因此它们将包含在调用epoll_wait()之前存在的所有内容。 AFAIK没有nfds初始元素的特定保证顺序,无论顺序如何,都只是实现工作方式的巧合。