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初始元素的特定保证顺序,无论顺序如何,都只是实现工作方式的巧合。

10-08 19:06