首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么epoll_wait()对dup2(writable_fd,non_writable_fd)没有反应?

为什么epoll_wait()对dup2(writable_fd,non_writable_fd)没有反应?
EN

Stack Overflow用户
提问于 2015-01-14 16:50:58
回答 1查看 351关注 0票数 1

让我们想象一下,我在epoll观察者中添加了不可写的fd,等待它何时变为可写的。

代码语言:javascript
复制
epoll_ctl(epollfd, EPOLL_CTL_ADD, non_writable_fd, {EPOLLOUT})

non_writable_fd仍然不可写,epoll_wait将返回0现成的fds

那我来做这个

代码语言:javascript
复制
dup2(writable_fd, non_writable_fd)

其中writable_fd是一个可写的文件描述符。现在,我期望epoll_wait将立即返回1FD。但不幸的是,它仍然超时,0FD返回。

为什么这一技术在与epollpoll一起工作时不适用于

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-14 17:02:25

问题是,epoll关心的是“打开的文件描述”,而不是文件描述符。答案隐藏在几层手册页中。首先,epoll_wait

关闭文件描述符会导致从所有epoll设置中自动删除吗? 是,但是要注意以下几点。文件描述符是对打开的文件描述的引用(请参见打开(2)).

回到您的dup2电话:

代码语言:javascript
复制
dup2(writable_fd, non_writable_fd)

dup2调用首先自动关闭non_writable_fd,然后将其指向与writable_fd相同的文件描述。审议2起案件:

  1. 您没有做任何特殊的事情,所以您的dup2最终关闭了与non_writable_fd相关的打开文件描述。在本例中,epoll只是将其从集合中移除,这就是
  2. 在这种情况下,dup non_writable_fd只是简单地切断了non_writable_fd和它的OFD之间的联系,后者还在继续,由epoll观看。

在这两种情况下,您的dup调用都没有达到您想要的目的:您需要再次显式地调用epoll_ctl

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

https://stackoverflow.com/questions/27948251

复制
相关文章

相似问题

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