]>
Commit | Line | Data |
---|---|---|
b0d623f7 | 1 | .\" |
04b8595b | 2 | .\" Copyright (c) 2008-2015 Apple Inc. All rights reserved. |
b0d623f7 A |
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. | |
04b8595b A |
284 | .It EV_OOBAND |
285 | Read filter on socket may set this flag to indicate the presence of out of | |
286 | band data on the descriptor. | |
55e303ae A |
287 | .It EV_ERROR |
288 | See | |
289 | .Sx RETURN VALUES | |
290 | below. | |
291 | .El | |
292 | .Pp | |
b0d623f7 A |
293 | ---- |
294 | .Pp | |
55e303ae A |
295 | The predefined system filters are listed below. |
296 | Arguments may be passed to and from the filter via the | |
297 | .Va fflags | |
298 | and | |
299 | .Va data | |
b0d623f7 A |
300 | fields in the |
301 | .Va kevent | |
302 | or | |
303 | .Va kevent64_s | |
304 | structure. | |
305 | .Bl -tag -width EVFILT_MACHPORT | |
55e303ae A |
306 | .It EVFILT_READ |
307 | Takes a file descriptor as the identifier, and returns whenever | |
308 | there is data available to read. | |
309 | The behavior of the filter is slightly different depending | |
310 | on the descriptor type. | |
311 | .Pp | |
312 | .Bl -tag -width 2n | |
313 | .It Sockets | |
314 | Sockets which have previously been passed to | |
315 | .Fn listen | |
316 | return when there is an incoming connection pending. | |
317 | .Va data | |
318 | contains the size of the listen backlog. | |
319 | .Pp | |
320 | Other socket descriptors return when there is data to be read, | |
321 | subject to the | |
322 | .Dv SO_RCVLOWAT | |
323 | value of the socket buffer. | |
324 | This may be overridden with a per-filter low water mark at the | |
325 | time the filter is added by setting the | |
326 | NOTE_LOWAT | |
327 | flag in | |
328 | .Va fflags , | |
329 | and specifying the new low water mark in | |
330 | .Va data . | |
331 | On return, | |
332 | .Va data | |
333 | contains the number of bytes of protocol data available to read. | |
334 | .Pp | |
04b8595b A |
335 | The presence of EV_OOBAND in |
336 | .Va flags , | |
337 | indicates the presence of out of band data on the socket | |
338 | .Va data | |
339 | equal to the potential number of OOB bytes availble to read. | |
340 | .Pp | |
55e303ae A |
341 | If the read direction of the socket has shutdown, then the filter |
342 | also sets EV_EOF in | |
343 | .Va flags , | |
344 | and returns the socket error (if any) in | |
345 | .Va fflags . | |
346 | It is possible for EOF to be returned (indicating the connection is gone) | |
347 | while there is still data pending in the socket buffer. | |
348 | .It Vnodes | |
349 | Returns when the file pointer is not at the end of file. | |
350 | .Va data | |
351 | contains the offset from current position to end of file, | |
352 | and may be negative. | |
353 | .It "Fifos, Pipes" | |
354 | Returns when the there is data to read; | |
355 | .Va data | |
356 | contains the number of bytes available. | |
357 | .Pp | |
358 | When the last writer disconnects, the filter will set EV_EOF in | |
359 | .Va flags . | |
360 | This may be cleared by passing in EV_CLEAR, at which point the | |
361 | filter will resume waiting for data to become available before | |
362 | returning. | |
363 | .El | |
364 | .It EVFILT_WRITE | |
365 | Takes a file descriptor as the identifier, and returns whenever | |
366 | it is possible to write to the descriptor. For sockets, pipes | |
367 | and fifos, | |
368 | .Va data | |
369 | will contain the amount of space remaining in the write buffer. | |
370 | The filter will set EV_EOF when the reader disconnects, and for | |
371 | the fifo case, this may be cleared by use of EV_CLEAR. | |
372 | Note that this filter is not supported for vnodes. | |
373 | .Pp | |
374 | For sockets, the low water mark and socket error handling is | |
375 | identical to the EVFILT_READ case. | |
376 | .It EVFILT_AIO | |
377 | This filter is currently unsupported. | |
378 | .\"The sigevent portion of the AIO request is filled in, with | |
379 | .\".Va sigev_notify_kqueue | |
380 | .\"containing the descriptor of the kqueue that the event should | |
381 | .\"be attached to, | |
382 | .\".Va sigev_value | |
383 | .\"containing the udata value, and | |
384 | .\".Va sigev_notify | |
385 | .\"set to SIGEV_KEVENT. | |
386 | .\"When the | |
387 | .\".Fn aio_* | |
388 | .\"system call is made, the event will be registered | |
389 | .\"with the specified kqueue, and the | |
390 | .\".Va ident | |
391 | .\"argument set to the | |
392 | .\".Fa struct aiocb | |
393 | .\"returned by the | |
394 | .\".Fn aio_* | |
395 | .\"system call. | |
396 | .\"The filter returns under the same conditions as aio_error. | |
397 | .\".Pp | |
398 | .\"Alternatively, a kevent structure may be initialized, with | |
399 | .\".Va ident | |
400 | .\"containing the descriptor of the kqueue, and the | |
401 | .\"address of the kevent structure placed in the | |
402 | .\".Va aio_lio_opcode | |
403 | .\"field of the AIO request. However, this approach will not work on | |
404 | .\"architectures with 64-bit pointers, and should be considered deprecated. | |
405 | .It EVFILT_VNODE | |
406 | Takes a file descriptor as the identifier and the events to watch for in | |
407 | .Va fflags , | |
408 | and returns when one or more of the requested events occurs on the descriptor. | |
409 | The events to monitor are: | |
410 | .Bl -tag -width XXNOTE_RENAME | |
411 | .It NOTE_DELETE | |
412 | The | |
413 | .Fn unlink | |
414 | system call | |
415 | was called on the file referenced by the descriptor. | |
416 | .It NOTE_WRITE | |
417 | A write occurred on the file referenced by the descriptor. | |
418 | .It NOTE_EXTEND | |
419 | The file referenced by the descriptor was extended. | |
420 | .It NOTE_ATTRIB | |
421 | The file referenced by the descriptor had its attributes changed. | |
422 | .It NOTE_LINK | |
423 | The link count on the file changed. | |
424 | .It NOTE_RENAME | |
425 | The file referenced by the descriptor was renamed. | |
426 | .It NOTE_REVOKE | |
427 | Access to the file was revoked via | |
428 | .Xr revoke 2 | |
429 | or the underlying fileystem was unmounted. | |
430 | .El | |
431 | .Pp | |
432 | On return, | |
433 | .Va fflags | |
434 | contains the events which triggered the filter. | |
435 | .It EVFILT_PROC | |
436 | Takes the process ID to monitor as the identifier and the events to watch for | |
437 | in | |
438 | .Va fflags , | |
439 | and returns when the process performs one or more of the requested events. | |
440 | If a process can normally see another process, it can attach an event to it. | |
441 | The events to monitor are: | |
b0d623f7 | 442 | .Bl -tag -width NOTE_SIGNAL |
55e303ae A |
443 | .It NOTE_EXIT |
444 | The process has exited. | |
6d2010ae A |
445 | .It NOTE_EXITSTATUS |
446 | 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 | 447 | .It NOTE_FORK |
2d21ac55 A |
448 | The process created a child process via |
449 | .Xr fork 2 | |
450 | or similar call. | |
55e303ae | 451 | .It NOTE_EXEC |
2d21ac55 | 452 | The process executed a new process via |
55e303ae A |
453 | .Xr execve 2 |
454 | or similar call. | |
2d21ac55 A |
455 | .It NOTE_SIGNAL |
456 | The process was sent a signal. Status can be checked via | |
457 | .Xr waitpid 2 | |
458 | or similar call. | |
459 | .It NOTE_REAP | |
460 | The process was reaped by the parent via | |
461 | .Xr wait 2 | |
39236c6e | 462 | or similar call. Deprecated, use NOTE_EXIT. |
55e303ae A |
463 | .El |
464 | .Pp | |
465 | On return, | |
466 | .Va fflags | |
467 | contains the events which triggered the filter. | |
468 | .It EVFILT_SIGNAL | |
469 | Takes the signal number to monitor as the identifier and returns | |
b0d623f7 | 470 | when the given signal is generated for the process. |
55e303ae A |
471 | This coexists with the |
472 | .Fn signal | |
473 | and | |
474 | .Fn sigaction | |
b0d623f7 A |
475 | facilities, and has a lower precedence. Only signals sent to the process, |
476 | not to a particular thread, will trigger the filter. The filter will record | |
55e303ae | 477 | all attempts to deliver a signal to a process, even if the signal has |
b0d623f7 | 478 | been marked as SIG_IGN. Event notification happens before normal |
55e303ae A |
479 | signal delivery processing. |
480 | .Va data | |
b0d623f7 | 481 | returns the number of times the signal has been generated since the last call to |
55e303ae A |
482 | .Fn kevent . |
483 | This filter automatically sets the EV_CLEAR flag internally. | |
b0d623f7 A |
484 | .It EVFILT_MACHPORT |
485 | Takes the name of a mach port, or port set, in | |
486 | .Va ident | |
487 | and waits until a message is received on the port or port set. When a message | |
488 | is recieved, the size of the message is returned in | |
489 | .Va data | |
490 | and if | |
491 | .Va fflags | |
492 | is set to MACH_RCV_MSG, a pointer to the message is returned in ext[0]. | |
55e303ae | 493 | .It EVFILT_TIMER |
b0d623f7 A |
494 | Establishes an interval timer with the data |
495 | timer identified by | |
496 | .Va ident . | |
497 | When adding a timer, | |
498 | .Va data | |
499 | specifies the timeout period and | |
500 | .Va fflags | |
501 | can be set to one of the following: | |
502 | .Bl -tag -width NOTE_ABSOLUTE | |
503 | .It NOTE_SECONDS | |
504 | data is in seconds | |
505 | .It NOTE_USECONDS | |
506 | data is in microseconds | |
507 | .It NOTE_NSECONDS | |
508 | data is in nanoseconds | |
509 | .It NOTE_ABSOLUTE | |
510 | data is an absolute timeout | |
39236c6e A |
511 | .It NOTE_CRITICAL |
512 | system makes a best effort to fire this timer as scheduled. | |
513 | .It NOTE_BACKGROUND | |
514 | system has extra leeway to coalesce this timer. | |
515 | .It NOTE_LEEWAY | |
516 | ext[1] holds user-supplied slop in deadline for timer coalescing. | |
b0d623f7 A |
517 | .El |
518 | .Pp | |
519 | If fflags is not set, the default is milliseconds. The timer will be periodic unless EV_ONESHOT is specified. | |
520 | On return, | |
521 | .Va data | |
522 | contains the number of times the timeout has expired since the last call to | |
523 | .Fn kevent | |
524 | or | |
525 | .Fn kevent64 . | |
526 | This filter automatically sets the EV_CLEAR flag internally. | |
b0d623f7 A |
527 | .El |
528 | .Pp | |
529 | ---- | |
530 | .Pp | |
531 | In the | |
532 | .Va ext[2] | |
533 | field of the | |
534 | .Va kevent64_s | |
535 | struture, | |
536 | .Va ext[0] | |
537 | is only used with the EVFILT_MACHPORT filter. | |
538 | With other filters, | |
539 | .Va ext[0] | |
540 | is passed through | |
541 | .Fn kevent64 | |
542 | much like | |
543 | .Va udata . | |
544 | .Va ext[1] | |
545 | can always be used like | |
546 | .Va udata . | |
547 | For the use of ext[0], see the EVFILT_MACHPORT filter above. | |
55e303ae A |
548 | .Sh RETURN VALUES |
549 | The | |
550 | .Fn kqueue | |
551 | system call | |
552 | creates a new kernel event queue and returns a file descriptor. | |
553 | If there was an error creating the kernel event queue, a value of -1 is | |
554 | returned and errno set. | |
555 | .Pp | |
556 | The | |
557 | .Fn kevent | |
b0d623f7 A |
558 | and |
559 | .Fn kevent64 | |
560 | system calls | |
561 | return the number of events placed in the | |
55e303ae A |
562 | .Fa eventlist , |
563 | up to the value given by | |
564 | .Fa nevents . | |
565 | If an error occurs while processing an element of the | |
566 | .Fa changelist | |
567 | and there is enough room in the | |
568 | .Fa eventlist , | |
569 | then the event will be placed in the | |
570 | .Fa eventlist | |
571 | with | |
572 | .Dv EV_ERROR | |
573 | set in | |
574 | .Va flags | |
575 | and the system error in | |
576 | .Va data . | |
577 | Otherwise, | |
578 | .Dv -1 | |
579 | will be returned, and | |
580 | .Dv errno | |
581 | will be set to indicate the error condition. | |
582 | If the time limit expires, then | |
583 | .Fn kevent | |
b0d623f7 A |
584 | and |
585 | .Fn kevent64 | |
586 | return 0. | |
55e303ae A |
587 | .Sh ERRORS |
588 | The | |
589 | .Fn kqueue | |
590 | system call fails if: | |
591 | .Bl -tag -width Er | |
592 | .It Bq Er ENOMEM | |
593 | The kernel failed to allocate enough memory for the kernel queue. | |
594 | .It Bq Er EMFILE | |
595 | The per-process descriptor table is full. | |
596 | .It Bq Er ENFILE | |
597 | The system file table is full. | |
598 | .El | |
599 | .Pp | |
600 | The | |
601 | .Fn kevent | |
b0d623f7 A |
602 | and |
603 | .Fn kevent64 | |
604 | system calls fail if: | |
55e303ae A |
605 | .Bl -tag -width Er |
606 | .It Bq Er EACCES | |
607 | The process does not have permission to register a filter. | |
608 | .It Bq Er EFAULT | |
609 | There was an error reading or writing the | |
610 | .Va kevent | |
b0d623f7 A |
611 | or |
612 | .Va kevent64_s | |
55e303ae A |
613 | structure. |
614 | .It Bq Er EBADF | |
615 | The specified descriptor is invalid. | |
616 | .It Bq Er EINTR | |
617 | A signal was delivered before the timeout expired and before any | |
618 | events were placed on the kqueue for return. | |
619 | .It Bq Er EINVAL | |
620 | The specified time limit or filter is invalid. | |
621 | .It Bq Er ENOENT | |
622 | The event could not be found to be modified or deleted. | |
623 | .It Bq Er ENOMEM | |
624 | No memory was available to register the event. | |
625 | .It Bq Er ESRCH | |
626 | The specified process to attach to does not exist. | |
627 | .El | |
628 | .Sh SEE ALSO | |
629 | .Xr aio_error 2 , | |
630 | .Xr aio_read 2 , | |
631 | .Xr aio_return 2 , | |
632 | .Xr read 2 , | |
633 | .Xr select 2 , | |
634 | .Xr sigaction 2 , | |
635 | .Xr write 2 , | |
636 | .Xr signal 3 | |
637 | .Sh HISTORY | |
638 | The | |
639 | .Fn kqueue | |
640 | and | |
641 | .Fn kevent | |
642 | system calls first appeared in | |
643 | .Fx 4.1 . | |
644 | .Sh AUTHORS | |
645 | The | |
646 | .Fn kqueue | |
647 | system and this manual page were written by | |
648 | .An Jonathan Lemon Aq jlemon@FreeBSD.org . | |
649 | .Sh BUGS | |
650 | Not all filesystem types support kqueue-style notifications. | |
651 | And even some that do, like some remote filesystems, may only | |
652 | support a subset of the notification semantics described | |
653 | here. |