summaryrefslogtreecommitdiffstats
path: root/lib/libc/sys/kqueue.2
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2016-05-09 17:39:11 -0300
committerRenato Botelho <renato@netgate.com>2016-05-09 17:39:11 -0300
commiteb1aa95459d780e1328d821fd6af261c2221a62b (patch)
treed0c75db0de1902022252ffee3acbfe775366214c /lib/libc/sys/kqueue.2
parent4a578420216361b8acfb7296dd0b68c805e5121b (diff)
parent1708fafa25d9413ab466d3670d803e2ebf885d45 (diff)
downloadFreeBSD-src-eb1aa95459d780e1328d821fd6af261c2221a62b.zip
FreeBSD-src-eb1aa95459d780e1328d821fd6af261c2221a62b.tar.gz
Merge remote-tracking branch 'origin/stable/10' into devel
Diffstat (limited to 'lib/libc/sys/kqueue.2')
-rw-r--r--lib/libc/sys/kqueue.257
1 files changed, 56 insertions, 1 deletions
diff --git a/lib/libc/sys/kqueue.2 b/lib/libc/sys/kqueue.2
index 104e7bd..b692c1f 100644
--- a/lib/libc/sys/kqueue.2
+++ b/lib/libc/sys/kqueue.2
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 29, 2015
+.Dd May 1, 2016
.Dt KQUEUE 2
.Os
.Sh NAME
@@ -373,6 +373,10 @@ The file referenced by the descriptor was extended.
The file referenced by the descriptor had its attributes changed.
.It Dv NOTE_LINK
The link count on the file changed.
+In particular, the
+.Dv NOTE_LINK
+event is reported if a subdirectory was created or deleted inside
+the directory referenced by the descriptor.
.It Dv NOTE_RENAME
The file referenced by the descriptor was renamed.
.It Dv NOTE_REVOKE
@@ -577,6 +581,57 @@ will be set to indicate the error condition.
If the time limit expires, then
.Fn kevent
returns 0.
+.Sh EXAMPLES
+.Bd -literal -compact
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int
+main(int argc, char **argv)
+{
+ struct kevent event; /* Event we want to monitor */
+ struct kevent tevent; /* Event triggered */
+ int kq, fd, ret;
+
+ if (argc != 2)
+ err(EXIT_FAILURE, "Usage: %s path\en", argv[0]);
+ fd = open(argv[1], O_RDONLY);
+ if (fd == -1)
+ err(EXIT_FAILURE, "Failed to open '%s'", argv[1]);
+
+ /* Create kqueue. */
+ kq = kqueue();
+ if (kq == -1)
+ err(EXIT_FAILURE, "kqueue() failed");
+
+ /* Initialize kevent structure. */
+ EV_SET(&event, fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, NOTE_WRITE,
+ 0, NULL);
+ /* Attach event to the kqueue. */
+ ret = kevent(kq, &event, 1, NULL, 0, NULL);
+ if (ret == -1)
+ err(EXIT_FAILURE, "kevent register");
+ if (event.flags & EV_ERROR)
+ errx(EXIT_FAILURE, "Event error: %s", strerror(event.data));
+
+ for (;;) {
+ /* Sleep until something happens. */
+ ret = kevent(kq, NULL, 0, &tevent, 1, NULL);
+ if (ret == -1) {
+ err(EXIT_FAILURE, "kevent wait");
+ } else if (ret > 0) {
+ printf("Something was written in '%s'\en", argv[1]);
+ }
+ }
+}
+.Ed
.Sh ERRORS
The
.Fn kqueue
OpenPOWER on IntegriCloud