Move kqueue related files to kqueue/ directory and netbsd-llist.c to genstructs/linke...
[eleutheria.git] / kqueue / kqtimer.c
blob1a19ae3e196eb181002c58bcbf84084aad5e5039
1 #include <sys/event.h>
2 #include <sys/time.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h> /* for strerror() */
6 #include <unistd.h>
8 /* function prototypes */
9 void diep(const char *s);
11 int main(void)
13 struct kevent change; /* event we want to monitor */
14 struct kevent event; /* event that was triggered */
15 pid_t pid;
16 int kq, nev;
18 /* create a new kernel event queue */
19 if ((kq = kqueue()) == -1)
20 diep("kqueue()");
22 /* initalise kevent structure */
23 EV_SET(&change, 1, EVFILT_TIMER, EV_ADD | EV_ENABLE, 0, 5000, 0);
25 /* loop forever */
26 for (;;) {
27 nev = kevent(kq, &change, 1, &event, 1, NULL);
29 if (nev < 0)
30 diep("kevent()");
32 else if (nev > 0) {
33 if (event.flags & EV_ERROR) { /* report any error */
34 fprintf(stderr, "EV_ERROR: %s\n", strerror(event.data));
35 exit(EXIT_FAILURE);
38 if ((pid = fork()) < 0) /* fork error */
39 diep("fork()");
41 else if (pid == 0) /* child */
42 if (execlp("date", "date", (char *)0) < 0)
43 diep("execlp()");
47 close(kq);
48 return EXIT_SUCCESS;
51 void diep(const char *s)
53 perror(s);
54 exit(EXIT_FAILURE);