NAME
kfilter_register,
kfilter_unregister —
add or remove kernel event filters
SYNOPSIS
#include <sys/event.h>
int
kfilter_register(
const
char *name,
struct
filterops *filtops,
int
*retfilter);
int
kfilter_unregister(
const
char *name);
DESCRIPTION
The
kfilter_register() function adds a new kernel event filter
(kfilter) to the system, for use by callers of
kqueue(2) and
kevent(2).
name is the name of the new filter (which must not
already exist), and
filtops is a pointer to a
filterops structure which describes the filter
operations. Both
name and
filtops
will be copied to an internal data structure, and a new filter number will be
allocated. If
retfilter is not
NULL
, then the new filter number will be returned in
the address pointed at by
retfilter.
The
kfilter_unregister() function removes a kfilter named
name that was previously registered with
kfilter_register(). If a filter with the same
name is later reregistered with
kfilter_register(), it will get a different filter number
(i.e., filter numbers are not recycled). It is not possible to unregister the
system filters (i.e., those that start with “EVFILT_” and are
documented in
kqueue(2)).
The
filterops structure is defined as follows:
struct filterops {
int f_isfd; /* true if ident == filedescriptor */
int (*f_attach)(struct knote *kn);
/* called when knote is ADDed */
void (*f_detach)(struct knote *kn);
/* called when knote is DELETEd */
int (*f_event)(struct knote *kn, long hint);
/* called when event is triggered */
};
If the filter operation is for a file descriptor,
f_isfd
should be non-zero, otherwise it should be zero. This controls where the
kqueue(2) system stores the
knotes for an object.
RETURN VALUES
kfilter_register() returns 0 on success,
EINVAL
if there's an invalid argument, or
EEXIST
if the filter already exists,
kfilter_unregister() returns 0 on success,
EINVAL
if there's an invalid argument, or
ENOENT
if the filter doesn't exist.
SEE ALSO
kqueue(2),
free(9),
knote(9),
malloc(9)
HISTORY
The
kfilter_register() and
kfilter_unregister() functions first appeared in
NetBSD 2.0.
AUTHORS
The
kfilter_register() and
kfilter_unregister() functions were implemented by
Luke Mewburn ⟨lukem@NetBSD.org⟩.