我试图了解 kqueue 中 EV_DISABLE 和 EV_ENABLE 的用例。
int KQueue = kqueue();
struct kevent ev = {
.ident = fd,
.filter = EVFILT_READ,
.flags = EV_ADD | EV_DISABLE,
.udata = somePtr
};
kevent(KQueue, &ev, 1, NULL, 0, NULL);
...
struct kevent ev = {
.ident = fd,
.filter = EVFILT_READ,
.flags = EV_ENABLE
};
kevent(KQueue, &ev, 1, &ev, 1, NULL);
现在,当最后一次调用kevent()
返回时,ev.udata
是NULL
而不是somePtr
. 如果即使未设置 EV_ADD 也kevent()
更新指针,而不是仅启用事件,那么允许您添加禁用事件的原因是什么?udata