]>
Commit | Line | Data |
---|---|---|
b0d623f7 A |
1 | .\" |
2 | .\" Copyright (c) 2008 Apple Inc. All rights reserved. | |
3 | .\" | |
4 | .\" @APPLE_LICENSE_HEADER_START@ | |
5 | .\" | |
6 | .\" This file contains Original Code and/or Modifications of Original Code | |
7 | .\" as defined in and that are subject to the Apple Public Source License | |
8 | .\" Version 2.0 (the 'License'). You may not use this file except in | |
9 | .\" compliance with the License. Please obtain a copy of the License at | |
10 | .\" http://www.opensource.apple.com/apsl/ and read it before using this | |
11 | .\" file. | |
12 | .\" | |
13 | .\" The Original Code and all software distributed under the License are | |
14 | .\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
15 | .\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
16 | .\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
17 | .\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
18 | .\" Please see the License for the specific language governing rights and | |
19 | .\" limitations under the License. | |
20 | .\" | |
21 | .\" @APPLE_LICENSE_HEADER_END@ | |
22 | .\" | |
23 | .\" | |
55e303ae A |
24 | .\" Copyright (c) 2000 Jonathan Lemon |
25 | .\" All rights reserved. | |
26 | .\" | |
27 | .\" Redistribution and use in source and binary forms, with or without | |
28 | .\" modification, are permitted provided that the following conditions | |
29 | .\" are met: | |
30 | .\" 1. Redistributions of source code must retain the above copyright | |
31 | .\" notice, this list of conditions and the following disclaimer. | |
32 | .\" 2. Redistributions in binary form must reproduce the above copyright | |
33 | .\" notice, this list of conditions and the following disclaimer in the | |
34 | .\" documentation and/or other materials provided with the distribution. | |
35 | .\" | |
36 | .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND | |
37 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
38 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
39 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |
40 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
41 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
42 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
43 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
44 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
45 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
46 | .\" SUCH DAMAGE. | |
47 | .\" | |
48 | .\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.32 2002/12/19 09:40:25 ru Exp $ | |
49 | .\" | |
b0d623f7 | 50 | .Dd October 21, 2008 |
55e303ae A |
51 | .Dt KQUEUE 2 |
52 | .Os | |
53 | .Sh NAME | |
54 | .Nm kqueue , | |
b0d623f7 A |
55 | .Nm kevent , |
56 | and | |
57 | .Nm kevent64 | |
55e303ae A |
58 | .Nd kernel event notification mechanism |
59 | .Sh LIBRARY | |
60 | .Lb libc | |
61 | .Sh SYNOPSIS | |
62 | .In sys/types.h | |
63 | .In sys/event.h | |
64 | .In sys/time.h | |
65 | .Ft int | |
66 | .Fn kqueue "void" | |
67 | .Ft int | |
68 | .Fn kevent "int kq" "const struct kevent *changelist" "int nchanges" "struct kevent *eventlist" "int nevents" "const struct timespec *timeout" | |
b0d623f7 A |
69 | .Ft int |
70 | .Fn kevent64 "int kq" "const struct kevent64_s *changelist" "int nchanges" "struct kevent64_s *eventlist" "int nevents" "unsigned int flags" "const struct timespec *timeout" | |
55e303ae | 71 | .Fn EV_SET "&kev" ident filter flags fflags data udata |
b0d623f7 | 72 | .Fn EV_SET64 "&kev" ident filter flags fflags data udata "ext[0]" "ext[1]" |
55e303ae A |
73 | .Sh DESCRIPTION |
74 | The | |
75 | .Fn kqueue | |
76 | system call | |
6d2010ae | 77 | provides a generic method of notifying the user when a kernel |
55e303ae A |
78 | event (kevent) happens or a condition holds, based on the results |
79 | of small pieces of kernel code termed filters. | |
80 | A kevent is identified by an (ident, filter) pair and specifies | |
81 | the interesting conditions to be notified about for that pair. | |
b0d623f7 | 82 | An (ident, filter) pair can only appear once in a given kqueue. |
55e303ae A |
83 | Subsequent attempts to register the same pair for a given kqueue |
84 | will result in the replacement of the conditions being watched, | |
85 | not an addition. | |
86 | .Pp | |
87 | The filter identified in a kevent is executed upon the initial | |
88 | registration of that event in order to detect whether a preexisting | |
89 | condition is present, and is also executed whenever an event is | |
90 | passed to the filter for evaluation. | |
91 | If the filter determines that the condition should be reported, | |
92 | then the kevent is placed on the kqueue for the user to retrieve. | |
93 | .Pp | |
94 | The filter is also run when the user attempts to retrieve the kevent | |
95 | from the kqueue. | |
96 | If the filter indicates that the condition that triggered | |
97 | the event no longer holds, the kevent is removed from the kqueue and | |
98 | is not returned. | |
99 | .Pp | |
100 | Multiple events which trigger the filter do not result in multiple | |
101 | kevents being placed on the kqueue; instead, the filter will aggregate | |
102 | the events into a single struct kevent. | |
103 | Calling | |
104 | .Fn close | |
105 | on a file descriptor will remove any kevents that reference the descriptor. | |
106 | .Pp | |
107 | The | |
108 | .Fn kqueue | |
109 | system call | |
110 | creates a new kernel event queue and returns a descriptor. | |
111 | The queue is not inherited by a child created with | |
112 | .Xr fork 2 . | |
113 | .Pp | |
114 | The | |
115 | .Fn kevent | |
b0d623f7 A |
116 | and |
117 | .Fn kevent64 | |
118 | system calls | |
119 | are used to register events with the queue, and return any pending | |
55e303ae A |
120 | events to the user. |
121 | The | |
122 | .Fa changelist | |
123 | argument | |
124 | is a pointer to an array of | |
125 | .Va kevent | |
b0d623f7 A |
126 | or |
127 | .Va kevent64_s | |
55e303ae A |
128 | structures, as defined in |
129 | .Aq Pa sys/event.h . | |
130 | All changes contained in the | |
131 | .Fa changelist | |
132 | are applied before any pending events are read from the queue. | |
133 | The | |
134 | .Fa nchanges | |
135 | argument | |
136 | gives the size of | |
137 | .Fa changelist . | |
138 | The | |
139 | .Fa eventlist | |
140 | argument | |
b0d623f7 A |
141 | is a pointer to an array of |
142 | .Va kevent | |
143 | or | |
144 | .Va kevent64_s | |
145 | structures. | |
55e303ae A |
146 | The |
147 | .Fa nevents | |
148 | argument | |
149 | determines the size of | |
150 | .Fa eventlist . | |
151 | If | |
152 | .Fa timeout | |
153 | is a non-NULL pointer, it specifies a maximum interval to wait | |
154 | for an event, which will be interpreted as a struct timespec. If | |
155 | .Fa timeout | |
b0d623f7 | 156 | is a NULL pointer, both |
55e303ae | 157 | .Fn kevent |
b0d623f7 A |
158 | and |
159 | .Fn kevent64 | |
160 | wait indefinitely. To effect a poll, the | |
55e303ae A |
161 | .Fa timeout |
162 | argument should be non-NULL, pointing to a zero-valued | |
163 | .Va timespec | |
164 | structure. The same array may be used for the | |
165 | .Fa changelist | |
166 | and | |
167 | .Fa eventlist . | |
168 | .Pp | |
169 | The | |
170 | .Fn EV_SET | |
171 | macro is provided for ease of initializing a | |
b0d623f7 A |
172 | .Va kevent |
173 | structure. Similarly, | |
174 | .Fn EV_SET64 | |
175 | initializes a | |
176 | .Va kevent64_s | |
177 | structure. | |
55e303ae A |
178 | .Pp |
179 | The | |
180 | .Va kevent | |
b0d623f7 A |
181 | and |
182 | .Va kevent64_s | |
183 | structures are defined as: | |
55e303ae A |
184 | .Bd -literal |
185 | struct kevent { | |
b0d623f7 A |
186 | uintptr_t ident; /* identifier for this event */ |
187 | int16_t filter; /* filter for event */ | |
188 | uint16_t flags; /* general flags */ | |
189 | uint32_t fflags; /* filter-specific flags */ | |
190 | intptr_t data; /* filter-specific data */ | |
191 | void *udata; /* opaque user data identifier */ | |
192 | }; | |
193 | ||
194 | ||
195 | struct kevent64_s { | |
196 | uint64_t ident; /* identifier for this event */ | |
197 | int16_t filter; /* filter for event */ | |
198 | uint16_t flags; /* general flags */ | |
199 | uint32_t fflags; /* filter-specific flags */ | |
200 | int64_t data; /* filter-specific data */ | |
201 | uint64_t udata; /* opaque user data identifier */ | |
202 | uint64_t ext[2]; /* filter-specific extensions */ | |
55e303ae A |
203 | }; |
204 | .Ed | |
205 | .Pp | |
b0d623f7 A |
206 | ---- |
207 | .Pp | |
55e303ae A |
208 | The fields of |
209 | .Fa struct kevent | |
b0d623f7 A |
210 | and |
211 | .Fa struct kevent64_s | |
55e303ae A |
212 | are: |
213 | .Bl -tag -width XXXfilter | |
214 | .It ident | |
215 | Value used to identify this event. | |
216 | The exact interpretation is determined by the attached filter, | |
217 | but often is a file descriptor. | |
218 | .It filter | |
219 | Identifies the kernel filter used to process this event. The pre-defined | |
220 | system filters are described below. | |
221 | .It flags | |
222 | Actions to perform on the event. | |
223 | .It fflags | |
224 | Filter-specific flags. | |
225 | .It data | |
226 | Filter-specific data value. | |
227 | .It udata | |
228 | Opaque user-defined value passed through the kernel unchanged. | |
229 | .El | |
230 | .Pp | |
b0d623f7 A |
231 | In addition, |
232 | .Fa struct kevent64_s | |
233 | contains: | |
234 | .Bl -tag -width XXXfilter | |
235 | .It ext[2] | |
236 | This field stores extensions for the event's filter. What type of extension depends on | |
237 | what type of filter is being used. | |
238 | .El | |
239 | .Pp | |
240 | ---- | |
241 | .Pp | |
55e303ae A |
242 | The |
243 | .Va flags | |
244 | field can contain the following values: | |
245 | .Bl -tag -width XXXEV_ONESHOT | |
246 | .It EV_ADD | |
247 | Adds the event to the kqueue. Re-adding an existing event | |
248 | will modify the parameters of the original event, and not result | |
249 | in a duplicate entry. Adding an event automatically enables it, | |
250 | unless overridden by the EV_DISABLE flag. | |
251 | .It EV_ENABLE | |
252 | Permit | |
253 | .Fn kevent | |
b0d623f7 A |
254 | and |
255 | .Fn kevent64 | |
55e303ae A |
256 | to return the event if it is triggered. |
257 | .It EV_DISABLE | |
258 | Disable the event so | |
259 | .Fn kevent | |
b0d623f7 A |
260 | and |
261 | .Fn kevent64 | |
55e303ae A |
262 | will not return it. The filter itself is not disabled. |
263 | .It EV_DELETE | |
264 | Removes the event from the kqueue. Events which are attached to | |
265 | file descriptors are automatically deleted on the last close of | |
266 | the descriptor. | |
2d21ac55 A |
267 | .It EV_RECEIPT |
268 | This flag is useful for making bulk changes to a kqueue without draining any | |
269 | pending events. When passed as input, it forces EV_ERROR to always be returned. | |
6d2010ae | 270 | When a filter is successfully added, the |
2d21ac55 A |
271 | .Va data |
272 | field will be zero. | |
55e303ae A |
273 | .It EV_ONESHOT |
274 | Causes the event to return only the first occurrence of the filter | |
275 | being triggered. After the user retrieves the event from the kqueue, | |
276 | it is deleted. | |
277 | .It EV_CLEAR | |
278 | After the event is retrieved by the user, its state is reset. | |
279 | This is useful for filters which report state transitions | |
280 | instead of the current state. Note that some filters may automatically | |
281 | set this flag internally. | |
282 | .It EV_EOF | |
283 | Filters may set this flag to indicate filter-specific EOF condition. | |
284 | .It EV_ERROR | |
285 | See | |
286 | .Sx RETURN VALUES | |
287 | below. | |
288 | .El | |
289 | .Pp | |
b0d623f7 A |
290 | ---- |
291 | .Pp | |
55e303ae A |
292 | The predefined system filters are listed below. |
293 | Arguments may be passed to and from the filter via the | |
294 | .Va fflags | |
295 | and | |
296 | .Va data | |
b0d623f7 A |
297 | fields in the |
298 | .Va kevent | |
299 | or | |
300 | .Va kevent64_s | |
301 | structure. | |
302 | .Bl -tag -width EVFILT_MACHPORT | |
55e303ae A |
303 | .It EVFILT_READ |
304 | Takes a file descriptor as the identifier, and returns whenever | |
305 | there is data available to read. | |
306 | The behavior of the filter is slightly different depending | |
307 | on the descriptor type. | |
308 | .Pp | |
309 | .Bl -tag -width 2n | |
310 | .It Sockets | |
311 | Sockets which have previously been passed to | |
312 | .Fn listen | |
313 | return when there is an incoming connection pending. | |
314 | .Va data | |
315 | contains the size of the listen backlog. | |
316 | .Pp | |
317 | Other socket descriptors return when there is data to be read, | |
318 | subject to the | |
319 | .Dv SO_RCVLOWAT | |
320 | value of the socket buffer. | |
321 | This may be overridden with a per-filter low water mark at the | |
322 | time the filter is added by setting the | |
323 | NOTE_LOWAT | |
324 | flag in | |
325 | .Va fflags , | |
326 | and specifying the new low water mark in | |
327 | .Va data . | |
328 | On return, | |
329 | .Va data | |
330 | contains the number of bytes of protocol data available to read. | |
331 | .Pp | |
332 | If the read direction of the socket has shutdown, then the filter | |
333 | also sets EV_EOF in | |
334 | .Va flags , | |
335 | and returns the socket error (if any) in | |
336 | .Va fflags . | |
337 | It is possible for EOF to be returned (indicating the connection is gone) | |
338 | while there is still data pending in the socket buffer. | |
339 | .It Vnodes | |
340 | Returns when the file pointer is not at the end of file. | |
341 | .Va data | |
342 | contains the offset from current position to end of file, | |
343 | and may be negative. | |
344 | .It "Fifos, Pipes" | |
345 | Returns when the there is data to read; | |
346 | .Va data | |
347 | contains the number of bytes available. | |
348 | .Pp | |
349 | When the last writer disconnects, the filter will set EV_EOF in | |
350 | .Va flags . | |
351 | This may be cleared by passing in EV_CLEAR, at which point the | |
352 | filter will resume waiting for data to become available before | |
353 | returning. | |
354 | .El | |
355 | .It EVFILT_WRITE | |
356 | Takes a file descriptor as the identifier, and returns whenever | |
357 | it is possible to write to the descriptor. For sockets, pipes | |
358 | and fifos, | |
359 | .Va data | |
360 | will contain the amount of space remaining in the write buffer. | |
361 | The filter will set EV_EOF when the reader disconnects, and for | |
362 | the fifo case, this may be cleared by use of EV_CLEAR. | |
363 | Note that this filter is not supported for vnodes. | |
364 | .Pp | |
365 | For sockets, the low water mark and socket error handling is | |
366 | identical to the EVFILT_READ case. | |
367 | .It EVFILT_AIO | |
368 | This filter is currently unsupported. | |
369 | .\"The sigevent portion of the AIO request is filled in, with | |
370 | .\".Va sigev_notify_kqueue | |
371 | .\"containing the descriptor of the kqueue that the event should | |
372 | .\"be attached to, | |
373 | .\".Va sigev_value | |
374 | .\"containing the udata value, and | |
375 | .\".Va sigev_notify | |
376 | .\"set to SIGEV_KEVENT. | |
377 | .\"When the | |
378 | .\".Fn aio_* | |
379 | .\"system call is made, the event will be registered | |
380 | .\"with the specified kqueue, and the | |
381 | .\".Va ident | |
382 | .\"argument set to the | |
383 | .\".Fa struct aiocb | |
384 | .\"returned by the | |
385 | .\".Fn aio_* | |
386 | .\"system call. | |
387 | .\"The filter returns under the same conditions as aio_error. | |
388 | .\".Pp | |
389 | .\"Alternatively, a kevent structure may be initialized, with | |
390 | .\".Va ident | |
391 | .\"containing the descriptor of the kqueue, and the | |
392 | .\"address of the kevent structure placed in the | |
393 | .\".Va aio_lio_opcode | |
394 | .\"field of the AIO request. However, this approach will not work on | |
395 | .\"architectures with 64-bit pointers, and should be considered deprecated. | |
396 | .It EVFILT_VNODE | |
397 | Takes a file descriptor as the identifier and the events to watch for in | |
398 | .Va fflags , | |
399 | and returns when one or more of the requested events occurs on the descriptor. | |
400 | The events to monitor are: | |
401 | .Bl -tag -width XXNOTE_RENAME | |
402 | .It NOTE_DELETE | |
403 | The | |
404 | .Fn unlink | |
405 | system call | |
406 | was called on the file referenced by the descriptor. | |
407 | .It NOTE_WRITE | |
408 | A write occurred on the file referenced by the descriptor. | |
409 | .It NOTE_EXTEND | |
410 | The file referenced by the descriptor was extended. | |
411 | .It NOTE_ATTRIB | |
412 | The file referenced by the descriptor had its attributes changed. | |
413 | .It NOTE_LINK | |
414 | The link count on the file changed. | |
415 | .It NOTE_RENAME | |
416 | The file referenced by the descriptor was renamed. | |
417 | .It NOTE_REVOKE | |
418 | Access to the file was revoked via | |
419 | .Xr revoke 2 | |
420 | or the underlying fileystem was unmounted. | |
421 | .El | |
422 | .Pp | |
423 | On return, | |
424 | .Va fflags | |
425 | contains the events which triggered the filter. | |
426 | .It EVFILT_PROC | |
427 | Takes the process ID to monitor as the identifier and the events to watch for | |
428 | in | |
429 | .Va fflags , | |
430 | and returns when the process performs one or more of the requested events. | |
431 | If a process can normally see another process, it can attach an event to it. | |
432 | The events to monitor are: | |
b0d623f7 | 433 | .Bl -tag -width NOTE_SIGNAL |
55e303ae A |
434 | .It NOTE_EXIT |
435 | The process has exited. | |
6d2010ae A |
436 | .It NOTE_EXITSTATUS |
437 | The process has exited and its exit status is in filter specific data. Valid only on child processes and to be used along with NOTE_EXIT. | |
55e303ae | 438 | .It NOTE_FORK |
2d21ac55 A |
439 | The process created a child process via |
440 | .Xr fork 2 | |
441 | or similar call. | |
55e303ae | 442 | .It NOTE_EXEC |
2d21ac55 | 443 | The process executed a new process via |
55e303ae A |
444 | .Xr execve 2 |
445 | or similar call. | |
2d21ac55 A |
446 | .It NOTE_SIGNAL |
447 | The process was sent a signal. Status can be checked via | |
448 | .Xr waitpid 2 | |
449 | or similar call. | |
450 | .It NOTE_REAP | |
451 | The process was reaped by the parent via | |
452 | .Xr wait 2 | |
39236c6e | 453 | or similar call. Deprecated, use NOTE_EXIT. |
55e303ae A |
454 | .El |
455 | .Pp | |
456 | On return, | |
457 | .Va fflags | |
458 | contains the events which triggered the filter. | |
459 | .It EVFILT_SIGNAL | |
460 | Takes the signal number to monitor as the identifier and returns | |
b0d623f7 | 461 | when the given signal is generated for the process. |
55e303ae A |
462 | This coexists with the |
463 | .Fn signal | |
464 | and | |
465 | .Fn sigaction | |
b0d623f7 A |
466 | facilities, and has a lower precedence. Only signals sent to the process, |
467 | not to a particular thread, will trigger the filter. The filter will record | |
55e303ae | 468 | all attempts to deliver a signal to a process, even if the signal has |
b0d623f7 | 469 | been marked as SIG_IGN. Event notification happens before normal |
55e303ae A |
470 | signal delivery processing. |
471 | .Va data | |
b0d623f7 | 472 | returns the number of times the signal has been generated since the last call to |
55e303ae A |
473 | .Fn kevent . |
474 | This filter automatically sets the EV_CLEAR flag internally. | |
b0d623f7 A |
475 | .It EVFILT_MACHPORT |
476 | Takes the name of a mach port, or port set, in | |
477 | .Va ident | |
478 | and waits until a message is received on the port or port set. When a message | |
479 | is recieved, the size of the message is returned in | |
480 | .Va data | |
481 | and if | |
482 | .Va fflags | |
483 | is set to MACH_RCV_MSG, a pointer to the message is returned in ext[0]. | |
55e303ae | 484 | .It EVFILT_TIMER |
b0d623f7 A |
485 | Establishes an interval timer with the data |
486 | timer identified by | |
487 | .Va ident . | |
488 | When adding a timer, | |
489 | .Va data | |
490 | specifies the timeout period and | |
491 | .Va fflags | |
492 | can be set to one of the following: | |
493 | .Bl -tag -width NOTE_ABSOLUTE | |
494 | .It NOTE_SECONDS | |
495 | data is in seconds | |
496 | .It NOTE_USECONDS | |
497 | data is in microseconds | |
498 | .It NOTE_NSECONDS | |
499 | data is in nanoseconds | |
500 | .It NOTE_ABSOLUTE | |
501 | data is an absolute timeout | |
39236c6e A |
502 | .It NOTE_CRITICAL |
503 | system makes a best effort to fire this timer as scheduled. | |
504 | .It NOTE_BACKGROUND | |
505 | system has extra leeway to coalesce this timer. | |
506 | .It NOTE_LEEWAY | |
507 | ext[1] holds user-supplied slop in deadline for timer coalescing. | |
b0d623f7 A |
508 | .El |
509 | .Pp | |
510 | If fflags is not set, the default is milliseconds. The timer will be periodic unless EV_ONESHOT is specified. | |
511 | On return, | |
512 | .Va data | |
513 | contains the number of times the timeout has expired since the last call to | |
514 | .Fn kevent | |
515 | or | |
516 | .Fn kevent64 . | |
517 | This filter automatically sets the EV_CLEAR flag internally. | |
b0d623f7 A |
518 | .El |
519 | .Pp | |
520 | ---- | |
521 | .Pp | |
522 | In the | |
523 | .Va ext[2] | |
524 | field of the | |
525 | .Va kevent64_s | |
526 | struture, | |
527 | .Va ext[0] | |
528 | is only used with the EVFILT_MACHPORT filter. | |
529 | With other filters, | |
530 | .Va ext[0] | |
531 | is passed through | |
532 | .Fn kevent64 | |
533 | much like | |
534 | .Va udata . | |
535 | .Va ext[1] | |
536 | can always be used like | |
537 | .Va udata . | |
538 | For the use of ext[0], see the EVFILT_MACHPORT filter above. | |
55e303ae A |
539 | .Sh RETURN VALUES |
540 | The | |
541 | .Fn kqueue | |
542 | system call | |
543 | creates a new kernel event queue and returns a file descriptor. | |
544 | If there was an error creating the kernel event queue, a value of -1 is | |
545 | returned and errno set. | |
546 | .Pp | |
547 | The | |
548 | .Fn kevent | |
b0d623f7 A |
549 | and |
550 | .Fn kevent64 | |
551 | system calls | |
552 | return the number of events placed in the | |
55e303ae A |
553 | .Fa eventlist , |
554 | up to the value given by | |
555 | .Fa nevents . | |
556 | If an error occurs while processing an element of the | |
557 | .Fa changelist | |
558 | and there is enough room in the | |
559 | .Fa eventlist , | |
560 | then the event will be placed in the | |
561 | .Fa eventlist | |
562 | with | |
563 | .Dv EV_ERROR | |
564 | set in | |
565 | .Va flags | |
566 | and the system error in | |
567 | .Va data . | |
568 | Otherwise, | |
569 | .Dv -1 | |
570 | will be returned, and | |
571 | .Dv errno | |
572 | will be set to indicate the error condition. | |
573 | If the time limit expires, then | |
574 | .Fn kevent | |
b0d623f7 A |
575 | and |
576 | .Fn kevent64 | |
577 | return 0. | |
55e303ae A |
578 | .Sh ERRORS |
579 | The | |
580 | .Fn kqueue | |
581 | system call fails if: | |
582 | .Bl -tag -width Er | |
583 | .It Bq Er ENOMEM | |
584 | The kernel failed to allocate enough memory for the kernel queue. | |
585 | .It Bq Er EMFILE | |
586 | The per-process descriptor table is full. | |
587 | .It Bq Er ENFILE | |
588 | The system file table is full. | |
589 | .El | |
590 | .Pp | |
591 | The | |
592 | .Fn kevent | |
b0d623f7 A |
593 | and |
594 | .Fn kevent64 | |
595 | system calls fail if: | |
55e303ae A |
596 | .Bl -tag -width Er |
597 | .It Bq Er EACCES | |
598 | The process does not have permission to register a filter. | |
599 | .It Bq Er EFAULT | |
600 | There was an error reading or writing the | |
601 | .Va kevent | |
b0d623f7 A |
602 | or |
603 | .Va kevent64_s | |
55e303ae A |
604 | structure. |
605 | .It Bq Er EBADF | |
606 | The specified descriptor is invalid. | |
607 | .It Bq Er EINTR | |
608 | A signal was delivered before the timeout expired and before any | |
609 | events were placed on the kqueue for return. | |
610 | .It Bq Er EINVAL | |
611 | The specified time limit or filter is invalid. | |
612 | .It Bq Er ENOENT | |
613 | The event could not be found to be modified or deleted. | |
614 | .It Bq Er ENOMEM | |
615 | No memory was available to register the event. | |
616 | .It Bq Er ESRCH | |
617 | The specified process to attach to does not exist. | |
618 | .El | |
619 | .Sh SEE ALSO | |
620 | .Xr aio_error 2 , | |
621 | .Xr aio_read 2 , | |
622 | .Xr aio_return 2 , | |
623 | .Xr read 2 , | |
624 | .Xr select 2 , | |
625 | .Xr sigaction 2 , | |
626 | .Xr write 2 , | |
627 | .Xr signal 3 | |
628 | .Sh HISTORY | |
629 | The | |
630 | .Fn kqueue | |
631 | and | |
632 | .Fn kevent | |
633 | system calls first appeared in | |
634 | .Fx 4.1 . | |
635 | .Sh AUTHORS | |
636 | The | |
637 | .Fn kqueue | |
638 | system and this manual page were written by | |
639 | .An Jonathan Lemon Aq jlemon@FreeBSD.org . | |
640 | .Sh BUGS | |
641 | Not all filesystem types support kqueue-style notifications. | |
642 | And even some that do, like some remote filesystems, may only | |
643 | support a subset of the notification semantics described | |
644 | here. |