На самом деле у вас нет для установки event.data.fd
. Это союз, вы можете назначить других членов. Когда epoll_wait
возвращается, вы получаете event.data
, связанный с дескриптором, который стал интересным:
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
Это означает, что вы совершенно свободны , а не , чтобы поместить что-либо в fd
и вместо этого поместить что-то в ptr
(например).
В заключение, epoll_ctl
не может полагаться на тот факт, что вы заполните fd
, поэтому он имеет отдельный явный параметр.