首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于epoll_ctl()

关于epoll_ctl()
EN

Stack Overflow用户
提问于 2012-02-17 17:28:27
回答 1查看 6.1K关注 0票数 11

在使用epoll_ctl()时,我发现第三个参数"fd“是除epoll文件描述符"epfd”之外的另一个文件描述符。我看到了一个这样的例子:

代码语言:javascript
复制
event.data.fd = sfd; //sfd is a fd for listening
event.events = EPOLLIN | EPOLLET;
s = epoll_ctl (efd, EPOLL_CTL_ADD, sfd, &event);

正如我所看到的,event.data.fd中的文件描述符与epoll_ctl中的第三个参数相同,为什么需要传递该描述符两次?有什么不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-17 17:33:34

实际上,你没有用来设置event.data.fd。这是一个联盟,你可以设置其他成员。当epoll_wait返回时,您将获得与有趣的描述符相关联的event.data

代码语言:javascript
复制
typedef union epoll_data {
    void    *ptr;
    int      fd;
    uint32_t u32;
    uint64_t u64;
} epoll_data_t;

这意味着你是完全自由的,而不是,你可以把任何东西放在fd里,或者放在ptr里(例如)。

总之,epoll_ctl不能依赖于您将填充fd这一事实,这就是为什么它有一个单独的显式参数。

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

https://stackoverflow.com/questions/9325748

复制
相关文章

相似问题

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