diff options
Diffstat (limited to 'static/netbsd/man2/kqueue.2')
| -rw-r--r-- | static/netbsd/man2/kqueue.2 | 900 |
1 files changed, 900 insertions, 0 deletions
diff --git a/static/netbsd/man2/kqueue.2 b/static/netbsd/man2/kqueue.2 new file mode 100644 index 00000000..dbda5980 --- /dev/null +++ b/static/netbsd/man2/kqueue.2 @@ -0,0 +1,900 @@ +.\" $NetBSD: kqueue.2,v 1.60 2023/07/28 23:41:16 wiz Exp $ +.\" +.\" Copyright (c) 2000 Jonathan Lemon +.\" All rights reserved. +.\" +.\" Copyright (c) 2001, 2002, 2003 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" Portions of this documentation is derived from text contributed by +.\" Luke Mewburn. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.22 2001/06/27 19:55:57 dd Exp $ +.\" +.Dd June 19, 2023 +.Dt KQUEUE 2 +.Os +.Sh NAME +.Nm kqueue , +.Nm kqueue1 , +.Nm kevent , +.Nm EV_SET +.Nd kernel event notification mechanism +.Sh LIBRARY +.Lb libc +.Sh SYNOPSIS +.In sys/event.h +.In sys/time.h +.Ft int +.Fn kqueue "void" +.Ft int +.Fn kqueue1 "int flags" +.Ft int +.Fn kevent "int kq" "const struct kevent *changelist" "size_t nchanges" "struct kevent *eventlist" "size_t nevents" "const struct timespec *timeout" +.Fn EV_SET "&kev" ident filter flags fflags data udata +.Sh DESCRIPTION +The +.Fn kqueue +system call +provides a generic method of notifying the user when an event +happens or a condition holds, based on the results of small +pieces of kernel code termed filters. +A kevent is identified by the (ident, filter) pair; there may only +be one unique kevent per kqueue. +.Pp +The filter is executed upon the initial registration of a kevent +in order to detect whether a preexisting condition is present, and is also +executed whenever an event is passed to the filter for evaluation. +If the filter determines that the condition should be reported, +then the kevent is placed on the kqueue for the user to retrieve. +.Pp +The filter is also run when the user attempts to retrieve the kevent +from the kqueue. +If the filter indicates that the condition that triggered +the event no longer holds, the kevent is removed from the kqueue and +is not returned. +.Pp +Multiple events which trigger the filter do not result in multiple +kevents being placed on the kqueue; instead, the filter will aggregate +the events into a single struct kevent. +Calling +.Xr close 2 +on a file descriptor will remove any kevents that reference the descriptor. +.Pp +The +.Fn kqueue +system call +creates a new kernel event queue and returns a descriptor. +.Pp +The +.Fn kqueue1 +system call also allows to set the following +.Fa flags +on the returned file descriptor: +.Bl -column O_NONBLOCK -offset indent +.It Dv O_CLOEXEC +Set the close on exec property. +.It Dv O_NONBLOCK +Set non-blocking I/O. +.It Dv O_NOSIGPIPE +Return +.Er EPIPE +instead of raising +.Dv SIGPIPE . +.El +.Pp +The queue is not inherited by a child created with +.Xr fork 2 . +.\" However, if +.\" .Xr rfork 2 +.\" is called without the +.\" .Dv RFFDG +.\" flag, then the descriptor table is shared, +.\" which will allow sharing of the kqueue between two processes. +.Pp +The +.Fn kevent +system call +is used to register events with the queue, and return any pending +events to the user. +The +.Fa changelist +argument +is a pointer to an array of +.Va kevent +structures, as defined in +.In sys/event.h . +All changes contained in the +.Fa changelist +are applied before any pending events are read from the queue. +The +.Fa nchanges +argument +gives the size of +.Fa changelist . +The +.Fa eventlist +argument +is a pointer to an array of kevent structures. +The +.Fa nevents +argument +determines the size of +.Fa eventlist . +When +.Fa nevents +is zero, +.Fn kevent +will return immediately even if there is a +.Fa timeout +specified unlike +.Xr select 2 . +If +.Fa timeout +is a +.No non- Ns Dv NULL +pointer, it specifies a maximum interval to wait +for an event, which will be interpreted as a +.Li struct timespec . +If +.Fa timeout +is a +.Dv NULL +pointer, +.Fn kevent +waits indefinitely. +To effect a poll, the +.Fa timeout +argument should be +.No non- Ns Dv NULL , +pointing to a zero-valued +.Xr timespec 3 +structure. +The same array may be used for the +.Fa changelist +and +.Fa eventlist . +.Pp +The +.Fn EV_SET +macro is provided for ease of initializing a kevent structure. +This macro does not evaluate its parameters multiple times. +.Pp +The +.Va kevent +structure is defined as: +.Bd -literal +struct kevent { + uintptr_t ident; /* identifier for this event */ + uint32_t filter; /* filter for event */ + uint32_t flags; /* action flags for kqueue */ + uint32_t fflags; /* filter flag value */ + int64_t data; /* filter data value */ + void *udata; /* opaque user data identifier */ + uint64_t ext[4]; /* extensions */ +}; +.Ed +.Pp +The fields of +.Fa struct kevent +are: +.Bl -tag -width "Fa filter" -offset indent +.It ident +Value used to identify this event. +The exact interpretation is determined by the attached filter, +but often is a file descriptor. +.It Fa filter +Identifies the kernel filter used to process this event. +There are pre-defined system filters (which are described below), and +other filters may be added by kernel subsystems as necessary. +.It Fa flags +Actions to perform on the event. +.It Fa fflags +Filter-specific flags. +.It Fa data +Filter-specific data value. +.It Fa udata +Opaque user-defined value passed through the kernel unchanged. +.It Fa ext +Extended data passed to and from kernel. +The +.Fa ext[0] +and +.Fa ext[1] +members use is defined by the filter. +If the filter does not use them, the members are copied unchanged. +The +.Fa ext[2] +and +.Fa ext[3] +members are always passed through the kernel as-is, +making additional context available to application. +.El +.Pp +The +.Va flags +field can contain the following values: +.Bl -tag -width XXXEV_ONESHOT -offset indent +.It Dv EV_ADD +Adds the event to the kqueue. +Re-adding an existing event will modify the parameters of the original +event, and not result in a duplicate entry. +Adding an event automatically enables it, +unless overridden by the EV_DISABLE flag. +.It Dv EV_ENABLE +Permit +.Fn kevent +to return the event if it is triggered. +.It Dv EV_DISABLE +Disable the event so +.Fn kevent +will not return it. +The filter itself is not disabled. +.It Dv EV_DISPATCH +Disable the event source immediately after delivery of an event. +See +.Dv EV_DISABLE +above. +.It Dv EV_DELETE +Removes the event from the kqueue. +Events which are attached to file descriptors are automatically deleted +on the last close of the descriptor. +.It Dv EV_RECEIPT +This flag is useful for making bulk changes to a kqueue without draining +any pending events. +When passed as input, it forces +.Dv EV_ERROR +to always be returned. +When a filter is successfully added the +.Va data +field will be zero. +Note that if this flag is encountered and there is no remaining space in +.Fa eventlist +to hold the +.Dv EV_ERROR +event, then subsequent changes will not get processed. +.It Dv EV_ONESHOT +Causes the event to return only the first occurrence of the filter +being triggered. +After the user retrieves the event from the kqueue, it is deleted. +.It Dv EV_CLEAR +After the event is retrieved by the user, its state is reset. +This is useful for filters which report state transitions +instead of the current state. +Note that some filters may automatically set this flag internally. +.It Dv EV_EOF +Filters may set this flag to indicate filter-specific EOF condition. +.It Dv EV_ERROR +See +.Sx RETURN VALUES +below. +.El +.Ss Filters +Filters are identified by a number. +There are two types of filters; pre-defined filters which +are described below, and third-party filters that may be added with +.Xr kfilter_register 9 +by kernel sub-systems, third-party device drivers, or loadable +kernel modules. +.Pp +As a third-party filter is referenced by a well-known name instead +of a statically assigned number, two +.Xr ioctl 2 Ns s +are supported on the file descriptor returned by +.Fn kqueue +to map a filter name to a filter number, and vice-versa (passing +arguments in a structure described below): +.Bl -tag -width KFILTER_BYFILTER -offset indent +.It Dv KFILTER_BYFILTER +Map +.Va filter +to +.Va name , +which is of size +.Va len . +.It Dv KFILTER_BYNAME +Map +.Va name +to +.Va filter . +.Va len +is ignored. +.El +.Pp +The following structure is used to pass arguments in and out of the +.Xr ioctl 2 : +.Bd -literal -offset indent +struct kfilter_mapping { + char *name; /* name to lookup or return */ + size_t len; /* length of name */ + uint32_t filter; /* filter to lookup or return */ +}; +.Ed +.Pp +The predefined system filters are listed below. +Arguments may be passed to and from the filter via the +.Va fflags +and +.Va data +fields in the kevent structure. +.Pp +The predefined system filters are: +.Bl -tag -width EVFILT_SIGNAL +.It Dv EVFILT_READ +Takes a descriptor as the identifier, and returns whenever +there is data available to read. +The behavior of the filter is slightly different depending +on the descriptor type. +.Bl -tag -width 2n +.It Sockets +Sockets which have previously been passed to +.Xr listen 2 +return when there is an incoming connection pending. +.Va data +contains the size of the listen backlog (i.e., the number of +connections ready to be accepted with +.Xr accept 2 . ) +.Pp +Other socket descriptors return when there is data to be read, +subject to the +.Dv SO_RCVLOWAT +value of the socket buffer. +This may be overridden with a per-filter low water mark at the +time the filter is added by setting the +NOTE_LOWAT +flag in +.Va fflags , +and specifying the new low water mark in +.Va data . +On return, +.Va data +contains the number of bytes in the socket buffer. +.Pp +If the read direction of the socket has shutdown, then the filter +also sets EV_EOF in +.Va flags , +and returns the socket error (if any) in +.Va fflags . +It is possible for EOF to be returned (indicating the connection is gone) +while there is still data pending in the socket buffer. +.It Vnodes +Returns when the file pointer is not at the end of file. +.Va data +contains the offset from current position to end of file, +and may be negative. +.\" .Pp +.\" This behavior is different from +.\" .Xr poll 2 , +.\" where read events are triggered for regular files unconditionally. +.\" This event can be triggered unconditionally by setting the +.\" .Dv NOTE_FILE_POLL +.\" flag in +.\" .Va fflags . +.It "Fifos, Pipes" +Returns when there is data to read; +.Va data +contains the number of bytes available. +.Pp +When the last writer disconnects, the filter will set EV_EOF in +.Va flags . +This may be cleared by passing in EV_CLEAR, at which point the +filter will resume waiting for data to become available before +returning. +.It "BPF devices" +Returns when the BPF buffer is full, the BPF timeout has expired, or +when the BPF has +.Dq immediate mode +enabled and there is any data to read; +.Va data +contains the number of bytes available. +.El +.It Dv EVFILT_WRITE +Takes a descriptor as the identifier, and returns whenever +it is possible to write to the descriptor. +For sockets, pipes, fifos, and ttys, +.Va data +will contain the amount of space remaining in the write buffer. +The filter will set EV_EOF when the reader disconnects, and for +the fifo case, this may be cleared by use of EV_CLEAR. +Note that this filter is not supported for vnodes. +.Pp +For sockets, the low water mark and socket error handling is +identical to the EVFILT_READ case. +.It Dv EVFILT_EMPTY +Takes a descriptor as the identifier, and returns whenever +there is no remaining data in the write buffer. +This is currently implemented only for sockets. +It's primary purpose is to provide visibility to an application that all +previously written data has been acknowledged by the receiver at the TCP +layer. +.It Dv EVFILT_AIO +This is not implemented in +.Nx . +.ig +The sigevent portion of the AIO request is filled in, with +.Va sigev_notify_kqueue +containing the descriptor of the kqueue that the event should +be attached to, +.Va sigev_value +containing the udata value, and +.Va sigev_notify +set to SIGEV_EVENT. +When the aio_* function is called, the event will be registered +with the specified kqueue, and the +.Va ident +argument set to the +.Fa struct aiocb +returned by the aio_* function. +The filter returns under the same conditions as aio_error. +.Pp +Alternatively, a kevent structure may be initialized, with +.Va ident +containing the descriptor of the kqueue, and the +address of the kevent structure placed in the +.Va aio_lio_opcode +field of the AIO request. +However, this approach will not work on +architectures with 64-bit pointers, and should be considered deprecated. +.. +.It Dv EVFILT_VNODE +Takes a file descriptor as the identifier and the events to watch for in +.Va fflags , +and returns when one or more of the requested events occurs on the descriptor. +The events to monitor are: +.Bl -tag -width NOTE_CLOSE_WRITE +.It Dv NOTE_ATTRIB +The file referenced by the descriptor had its attributes changed. +.It Dv NOTE_CLOSE +A file descriptor without write access referencing the file was closed. +.It Dv NOTE_CLOSE_WRITE +A file descriptor with write access referencing the file was closed. +.It Dv NOTE_DELETE +.Xr unlink 2 +was called on the file referenced by the descriptor. +.It Dv NOTE_EXTEND +The file referenced by the descriptor was extended. +.It Dv NOTE_LINK +The link count on the file changed. +.It Dv NOTE_OPEN +The file referenced by the descriptor was opened. +.It Dv NOTE_READ +A read occurred on the file referenced by the descriptor. +.It Dv NOTE_RENAME +The file referenced by the descriptor was renamed. +.It Dv NOTE_REVOKE +Access to the file was revoked via +.Xr revoke 2 +or the underlying file system was unmounted. +.It Dv NOTE_WRITE +A write occurred on the file referenced by the descriptor. +.El +.Pp +On return, +.Va fflags +contains the events which triggered the filter. +.It Dv EVFILT_PROC +Takes the process ID to monitor as the identifier and the events to watch for +in +.Va fflags , +and returns when the process performs one or more of the requested events. +If a process can normally see another process, it can attach an event to it. +The events to monitor are: +.Bl -tag -width XXNOTE_TRACKERR +.It Dv NOTE_EXIT +The process has exited. +The exit code of the process is stored in +.Va data . +.It Dv NOTE_FORK +The process has called +.Xr fork 2 . +.It Dv NOTE_EXEC +The process has executed a new process via +.Xr execve 2 +or similar call. +.It Dv NOTE_TRACK +Follow a process across +.Xr fork 2 +calls. +The parent process will return with NOTE_TRACK set in the +.Va fflags +field, while the child process will return with NOTE_CHILD set in +.Va fflags +and the parent PID in +.Va data . +.It Dv NOTE_TRACKERR +This flag is returned if the system was unable to attach an event to +the child process, usually due to resource limitations. +.El +.Pp +On return, +.Va fflags +contains the events which triggered the filter. +.It Dv EVFILT_SIGNAL +Takes the signal number to monitor as the identifier and returns +when the given signal is delivered to the current process. +This coexists with the +.Xr signal 3 +and +.Xr sigaction 2 +facilities, and has a lower precedence. +The filter will record +all attempts to deliver a signal to a process, even if the signal has +been marked as SIG_IGN. +Event notification happens after normal signal delivery processing. +.Va data +returns the number of times the signal has occurred since the last call to +.Fn kevent . +This filter automatically sets the EV_CLEAR flag internally. +.It Dv EVFILT_TIMER +Establishes an arbitrary timer identified by +.Va ident . +When adding a timer, +.Va data +specifies the timeout period in units described below, or, if +.Dv NOTE_ABSTIME +is set in +.Va fflags , +specifies the absolute time at which the timer should fire. +The timer will repeat unless +.Dv EV_ONESHOT +is set in +.Va flags +or +.Dv NOTE_ABSTIME +is set in +.Va fflags . +On return, +.Va data +contains the number of times the timeout has expired since the last call to +.Fn kevent . +This filter automatically sets +.Dv EV_CLEAR +in +.Va flags +for periodic timers. +Timers created with +.Dv NOTE_ABSTIME +remain activated on the kqueue once the absolute time has passed unless +.Dv EV_CLEAR +or +.Dv EV_ONESHOT +are also specified. +.Dv CLOCK_REALTIME +is the reference clock for timers created with +.Dv NOTE_ABSTIME . +.Pp +The filter accepts the following flags in the +.Va fflags +argument: +.Bl -tag -width XXNOTE_TRACKERR +.It Dv NOTE_SECONDS +The timer value in +.Va data +is expressed in seconds. +.It Dv NOTE_MSECONDS +The timer value in +.Va data +is expressed in milliseconds. +.It Dv NOTE_USECONDS +The timer value in +.Va data +is expressed in microseconds. +.It Dv NOTE_NSECONDS +The timer value in +.Va data +is expressed in nanoseconds. +.It Dv NOTE_ABSTIME +The timer value is an absolute time; see discussion above. +.El +.Pp +Note that +.Dv NOTE_SECONDS , +.Dv NOTE_MSECONDS , +.Dv NOTE_USECONDS , +and +.Dv NOTE_NSECONDS +are mutually exclusive; behavior is undefined if more than one are specified. +If a timer value unit is not specified, the default is +.Dv NOTE_MSECONDS . +.It Dv EVFILT_FS +Establishes a file system monitor. +Currently it only monitors file system mount and unmount actions. +.It Dv EVFILT_USER +Establishes a user event identified by +.Va ident +which is not associated with any kernel mechanism but is triggered by +user level code. +The lower 24 bits of the +.Va fflags +may be used for user defined flags and manipulated using the following: +.Bl -tag -width "Dv NOTE_FFLAGSMASK" +.It Dv NOTE_FFNOP +Ignore the input +.Va fflags . +.It Dv NOTE_FFAND +Bitwise AND +.Va fflags . +.It Dv NOTE_FFOR +Bitwise OR +.Va fflags . +.It Dv NOTE_FFCOPY +Copy +.Va fflags . +.It Dv NOTE_FFCTRLMASK +Control mask for +.Va fflags . +.It Dv NOTE_FFLAGSMASK +User defined flag mask for +.Va fflags . +.El +.Pp +A user event is triggered for output with the following: +.Bl -tag -width "Dv NOTE_FFLAGSMASK" +.It Dv NOTE_TRIGGER +Cause the event to be triggered. +.El +.Pp +On return, +.Va fflags +contains the users defined flags in the lower 24 bits. +.El +.Sh CANCELLATION BEHAVIOUR +If +.Fa nevents +is non-zero, i.e., the function is potentially blocking, the call +is a cancellation point. +Otherwise, i.e., if +.Fa nevents +is zero, the call is not cancellable. +Cancellation can only occur before any changes are made to the kqueue, +or when the call was blocked and no changes to the queue were requested. +.Sh RETURN VALUES +The +.Fn kqueue +system call +creates a new kernel event queue and returns a file descriptor. +If there was an error creating the kernel event queue, a value of \-1 is +returned and +.Dv errno +is set. +.Pp +The +.Fn kevent +system call +returns the number of events placed in the +.Fa eventlist , +up to the value given by +.Fa nevents . +If an error occurs while processing an element of the +.Fa changelist +and there is enough room in the +.Fa eventlist , +then the event will be placed in the +.Fa eventlist +with +.Dv EV_ERROR +set in +.Va flags +and the system error in +.Va data . +Otherwise, +.Dv \-1 +will be returned, and +.Dv errno +will be set to indicate the error condition. +If the time limit expires, then +.Fn kevent +returns 0. +.Sh EXAMPLES +The following example program monitors a file (provided to it as the first +argument) and prints information about some common events it receives +notifications for: +.Bd -literal -offset indent +#include <sys/types.h> +#include <sys/event.h> +#include <sys/time.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <fcntl.h> +#include <err.h> + +int +main(int argc, char *argv[]) +{ + int fd, kq, nev; + struct kevent ev; + static const struct timespec tout = { 1, 0 }; + + if ((fd = open(argv[1], O_RDONLY)) == -1) + err(1, "Cannot open `%s'", argv[1]); + + if ((kq = kqueue()) == -1) + err(1, "Cannot create kqueue"); + + EV_SET(&ev, fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, + NOTE_DELETE|NOTE_WRITE|NOTE_EXTEND|NOTE_ATTRIB|NOTE_LINK| + NOTE_RENAME|NOTE_REVOKE, 0, 0); + if (kevent(kq, &ev, 1, NULL, 0, &tout) == -1) + err(1, "kevent"); + for (;;) { + nev = kevent(kq, NULL, 0, &ev, 1, &tout); + if (nev == -1) + err(1, "kevent"); + if (nev == 0) + continue; + if (ev.fflags & NOTE_DELETE) { + printf("deleted "); + ev.fflags &= ~NOTE_DELETE; + } + if (ev.fflags & NOTE_WRITE) { + printf("written "); + ev.fflags &= ~NOTE_WRITE; + } + if (ev.fflags & NOTE_EXTEND) { + printf("extended "); + ev.fflags &= ~NOTE_EXTEND; + } + if (ev.fflags & NOTE_ATTRIB) { + printf("chmod/chown/utimes "); + ev.fflags &= ~NOTE_ATTRIB; + } + if (ev.fflags & NOTE_LINK) { + printf("hardlinked "); + ev.fflags &= ~NOTE_LINK; + } + if (ev.fflags & NOTE_RENAME) { + printf("renamed "); + ev.fflags &= ~NOTE_RENAME; + } + if (ev.fflags & NOTE_REVOKE) { + printf("revoked "); + ev.fflags &= ~NOTE_REVOKE; + } + printf("\\n"); + if (ev.fflags) + warnx("unknown event 0x%x\\n", ev.fflags); + } +} +.Ed +.Sh ERRORS +The +.Fn kqueue +function fails if: +.Bl -tag -width Er +.It Bq Er EMFILE +The per-process descriptor table is full. +.It Bq Er ENFILE +The system file table is full. +.It Bq Er ENOMEM +The kernel failed to allocate enough memory for the kernel queue. +.El +.Pp +The +.Fn kevent +function fails if: +.Bl -tag -width Er +.It Bq Er EACCES +The process does not have permission to register a filter. +.It Bq Er EBADF +The specified descriptor is invalid. +.It Bq Er EFAULT +There was an error reading or writing the +.Va kevent +structure. +.It Bq Er EINTR +A signal was delivered before the timeout expired and before any +events were placed on the kqueue for return. +All changes contained in the +.Fa changelist +are applied before returning this error. +.It Bq Er EINVAL +The specified time limit or filter is invalid. +.It Bq Er ENOENT +The event could not be found to be modified or deleted. +.It Bq Er ENOMEM +No memory was available to register the event. +.It Bq Er EOPNOTSUPP +This type of file descriptor is not supported for +.Fn kevent +operations. +.It Bq Er ESRCH +The specified process to attach to does not exist. +.El +.Sh SEE ALSO +.\" .Xr aio_error 2 , +.\" .Xr aio_read 2 , +.\" .Xr aio_return 2 , +.Xr fork 2 , +.Xr ioctl 2 , +.Xr listen 2 , +.Xr poll 2 , +.Xr read 2 , +.Xr select 2 , +.Xr sigaction 2 , +.Xr unlink 2 , +.Xr write 2 , +.Xr signal 3 , +.Xr timespec 3 , +.Xr kfilter_register 9 , +.Xr knote 9 +.Rs +.%A Jonathan Lemon +.%T "Kqueue: A Generic and Scalable Event Notification Facility" +.%I USENIX Association +.%B Proceedings of the FREENIX Track: 2001 USENIX Annual Technical Conference +.%D June 25-30, 2001 +.%U http://www.usenix.org/event/usenix01/freenix01/full_papers/lemon/lemon.pdf +.Re +.Sh HISTORY +The +.Fn kqueue +and +.Fn kevent +functions first appeared in +.Fx 4.1 , +and then in +.Nx 2.0 . +The +.Fn kqueue1 +function first appeared in +.Nx 6.0 . +.Pp +The +.Fn EV_SET +macro was protected from evaluating multiple times the first argument in +.Nx 8.0 . +.Pp +The +.Va udata +type was changed from intptr_t to void * in +.Nx 10.0 . +.Pp +Support for +.Dv NOTE_SECONDS , +.Dv NOTE_MSECONDS , +.Dv NOTE_USECONDS , +.Dv NOTE_NSECONDS , +and +.Dv NOTE_ABSTIME +filter flags for +.Dv EVFILT_TIMER +was added in +.Nx 10.0 . +.Pp +Support for +.Dv NOTE_OPEN , +.Dv NOTE_CLOSE , +.Dv NOTE_CLOSE_WRITE , +and +NOTE_READ +filter flags for +.Dv EVFILT_VNODE +was added in +.Nx 10.0 . +.Pp +Support for +.Dv EVFILT_EMPTY +was added in +.Nx 10.0 . |
