Требуется объяснение формулировки фильтра kevent.
У меня есть следующие строки для
kevent
в
man
:
EVFILT_TIMER Establishes an arbitrary timer identified by ident.
When adding a timer, data specifies the moment to
fire the timer (for NOTE_ABSTIME) or the timeout
period. The timer will be periodic unless EV_ONESHOT
or NOTE_ABSTIME is specified. On return, data
contains the number of times the timeout has expired
since the last call to kevent(). For non-monotonic
timers, this filter automatically sets the EV_CLEAR
flag internally.
The filter accepts the following flags in the fflags
argument:
NOTE_SECONDS data is in seconds.
NOTE_MSECONDS data is in milliseconds.
NOTE_USECONDS data is in microseconds.
NOTE_NSECONDS data is in nanoseconds.
NOTE_ABSTIME The specified expiration time is
absolute.
If fflags is not set, the default is milliseconds.
On return, fflags contains the events which triggered
the filter.
Теперь я не понимаю последнюю строку:
По возвращении fflags содержит события, вызвавшие срабатывание фильтра.
Я имею в виду буквально, я не понимаю предложение. Событие по определению является структурой. Как может содержать "события"?
Обновлять
Возвращаемое значение
fflags
из
EVFILT_TIMER
это то же самое, что было передано. Благодаря ОП принятого ответа.
1 ответ
Согласно
FreeBSD-13.0-RELEASE-p11
источники:
Из того, что мы видим в
/usr/src/sys/kern/kern_event.c
(как пример использования):
static int
filt_proc(struct knote *kn, long hint)
{
struct proc *p;
u_int event;
p = kn->kn_ptr.p_proc;
if (p == NULL) /* already activated, from attach filter */
return (0);
/* Mask off extra data. */
event = (u_int)hint & NOTE_PCTRLMASK;
/* If the user is interested in this event, record it. */
if (kn->kn_sfflags & event)
kn->kn_fflags |= event;
/* Process is gone, so flag the event as finished. */
if (event == NOTE_EXIT) {
kn->kn_flags |= EV_EOF | EV_ONESHOT;
kn->kn_ptr.p_proc = NULL;
if (kn->kn_fflags & NOTE_EXIT)
kn->kn_data = KW_EXITCODE(p->p_xexit, p->p_xsig);
if (kn->kn_fflags == 0)
kn->kn_flags |= EV_DROP;
return (1);
}
return (kn->kn_fflags != 0);
}
Значение
u_int event
выше в одном из некоторых определенных, в которых находятся
u_int
слишком.
Таким образом, используется как ввод и вывод , а также определено на странице руководства:
Предустановленные системные фильтры перечислены ниже. Аргументы могут передаваться в фильтр и из него через флаги и поля данных в структуре kevent.
Вы найдете
event
направленный
fflags
в
/usr/include/sys/event.h