file-descriptor - 为什么 epoll_ctl 需要两次文件描述符?

标签 file-descriptor epoll

在例子中:

event.events = EPOLLIN;
event.data.fd = fd;

int ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, event.data.fd, &event);

我将文件描述符作为 event.data 的成员和本身的参数传递。

什么epoll_ctl需要文件描述符两次?

最佳答案

这是 about epoll_ctl() 的副本

它需要它两次的原因是 event 中的 data 是一个 unionepoll_ctl 不知道您实际上是否提供了文件描述符或其他内容。

typedef union epoll_data {
    void        *ptr;
    int          fd;
    uint32_t     u32;
    uint64_t     u64;
} epoll_data_t;

关于file-descriptor - 为什么 epoll_ctl 需要两次文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56974063/

相关文章:

c++ - 使用 linux epoll : epoll_ctl seems to have redundant parameter?

linux - 链接多个 epoll 实例

c - recvmsg() 不支持操作

c - 什么是文件描述符?

sockets - 我可以在同一端口上使用不同类型的套接字吗?

c - 发送 EPOLLIN 事件到 epoll_wait

c - Linux 描述符类型

c - 在进程之间异步传递文件描述符

ios - 我可以关闭当前未使用的 UIAppFonts 的文件描述符吗?

c - 线程中的 epoll 和哈希表