- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
kqueue / kevent というものを初めて使ってみた;
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
main () {
/*
* Open current working directory
*/
DIR *d;
int dfd;
int err;
if (!(d = opendir("."))) {
perror("opendir");
exit(1);
}
/*
* create and register kernel event queue
*/
int kq;
struct kevent kev;
if ((kq = kqueue()) == -1) {
perror("kqueue");
closedir(d);
exit(1);
}
EV_SET(&kev, dirfd(d), EVFILT_VNODE, EV_ADD|EV_CLEAR, NOTE_WRITE, 0, NULL);
if (kevent(kq, &kev, 1, NULL, 0, NULL) < 0) {
perror("kevent on register");
closedir(d);
exit(1);
}
int retval;
/*
* then go monitoring
*/
if (0 < kevent(kq, NULL, 0, &kev, 1, NULL)) {
printf("dir changed.\n");
} else {
perror("kevent on nofity");
closedir(d);
exit(1);
}
/*
* normal exit
*/
closedir(d);
exit(0);
}