epoll是否保留了fd的注册顺序?

我正在玩Linux系统调用,我发现了epoll一些方面,这是不清楚的。 说,我创build一个epoll实例:

 epollfd = epoll_create(50); 

接下来,我在for -loop中注册了50个文件描述符:

 for(i=0; i<50; i++){ // open file "file-i".txt // construct epoll_event // register new file descriptor with epoll_ctl(epollfd, EPOLL_CTL_ADD ... 

现在我们有50个文件,准备行动(读或写 – 无所谓)。 我们将MAX_EVENTS设置为3:

 #define MAX_EVENTS 3 ... struct epoll_event events[MAX_EVENTS] ... epoll_wait(epollfd, events, MAX_EVENTS, -1) 

所有这50个文件都准备好了,我们只问了其中的3个。 哪些文件将在events数组中?

  • [1,2,3] – 前3个文件,以便他们被添加到epoll
  • [48,49,50] – 最后3个文件,以便他们被添加到epoll
  • [34,7,15] – 随机3个文件
  • 任何其他选项

谢谢。

仔细阅读epoll的源文件,可以看到就绪事件保存在一个链表中。 事件从列表的头部移除并添加到列表的末尾。

在此基础上,答案是描述符顺序是基于它们准备好的顺序。