首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制epoll文件描述符

复制epoll文件描述符
EN

Stack Overflow用户
提问于 2016-06-13 10:40:28
回答 2查看 775关注 0票数 1

是否有一种方法可以复制使用epoll_create创建的文件描述符,以便可以独立地修改副本(使用epoll_ctl添加/删除监视的文件描述符)。

例如,我创建了一个epoll文件描述符A,它等待文件PQ上的事件。我将其复制到epoll文件描述符B,并使B也等待文件R上的事件。调用epoll_wait(A)仍然只能等待PQ

这是在A上调用A时的行为,还是需要使用epoll_createepoll_ctl重新创建epoll文件描述符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-13 11:28:59

这有点让人困惑。

打开新文件时,将创建两个实体。一个,如果文件句柄在内核中。另一个是文件描述符,一个引用该文件句柄的数字。

虽然我不确定epoll fd会发生什么,但我假设它与任何其他重复的fds相同,即它们是相同的文件句柄。

有关这方面的提示,epoll(2)手册页的这段摘录可能会有所帮助:

Q6将关闭文件描述符,使其自动从所有epoll设置中删除? A6是的,但是要注意以下几点。文件描述符是对打开的文件描述的引用(请参阅open(2))。每当通过dup(2)dup2(2)fcntl(2) F_DUPFDfork(2)复制描述符时,就会创建引用相同的打开文件描述的新文件描述符。打开的文件描述一直存在,直到引用它的所有文件描述符都关闭为止。只有在所有引用基础打开文件描述的文件描述符都已关闭之后(或者在使用epoll_ctl(2) EPOLL_CTL_DEL显式删除描述符之前),才会从epoll集中删除文件描述符。 这意味着,即使关闭了作为epoll集一部分的文件描述符,如果引用相同基础文件描述的其他文件描述符仍处于打开状态,则可能会报告该文件描述符的事件。

因此,虽然我没有亲自检查它,但我猜想dup将不允许您以任何方式复制epoll的筛选列表。两个fd都将引用相同的文件句柄。对一个过滤器所做的任何更改都将反映在另一个过滤器中。

不幸的是,由于没有我所知道的API来查询epoll的筛选列表,这意味着你没有办法做你想做的事情,除非从一开始就跟踪。

票数 0
EN

Stack Overflow用户

发布于 2016-10-22 12:41:59

您可以独立地在不同的基础文件结构(或具有不同fd的相同文件结构)上操作重复的epfd。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37787619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档