Describe kqclient.c program
[eleutheria.git] / kqueue / kqtimer.c
blob96e9acdf4f40f92b94480f93469179ee0baf8ac6
1 /* compile with:
2 gcc kqtimer.c -o kqtimer -Wall -W -Wextra -ansi -pedantic */
4 #include <sys/event.h>
5 #include <sys/time.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h> /* for strerror() */
9 #include <unistd.h>
11 /* function prototypes */
12 void diep(const char *s);
14 int main(void)
16 struct kevent change; /* event we want to monitor */
17 struct kevent event; /* event that was triggered */
18 pid_t pid;
19 int kq, nev;
21 /* create a new kernel event queue */
22 if ((kq = kqueue()) == -1)
23 diep("kqueue()");
25 /* initalise kevent structure */
26 EV_SET(&change, 1, EVFILT_TIMER, EV_ADD | EV_ENABLE, 0, 5000, 0);
28 /* loop forever */
29 for (;;) {
30 nev = kevent(kq, &change, 1, &event, 1, NULL);
32 if (nev < 0)
33 diep("kevent()");
35 else if (nev > 0) {
36 if (event.flags & EV_ERROR) { /* report any error */
37 fprintf(stderr, "EV_ERROR: %s\n", strerror(event.data));
38 exit(EXIT_FAILURE);
41 if ((pid = fork()) < 0) /* fork error */
42 diep("fork()");
44 else if (pid == 0) /* child */
45 if (execlp("date", "date", (char *)0) < 0)
46 diep("execlp()");
50 close(kq);
51 return EXIT_SUCCESS;
54 void diep(const char *s)
56 perror(s);
57 exit(EXIT_FAILURE);