| #define _GNU_SOURCE /* needed to get the defines */ |
| #include <fcntl.h> /* in glibc 2.2 this has the needed |
| values defined */ |
| #include <signal.h> |
| #include <stdio.h> |
| #include <unistd.h> |
| |
| static volatile int event_fd; |
| |
| static void handler(int sig, siginfo_t *si, void *data) |
| { |
| event_fd = si->si_fd; |
| } |
| |
| int main(void) |
| { |
| struct sigaction act; |
| int fd; |
| |
| act.sa_sigaction = handler; |
| sigemptyset(&act.sa_mask); |
| act.sa_flags = SA_SIGINFO; |
| sigaction(SIGRTMIN + 1, &act, NULL); |
| |
| fd = open(".", O_RDONLY); |
| fcntl(fd, F_SETSIG, SIGRTMIN + 1); |
| fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT); |
| /* we will now be notified if any of the files |
| in "." is modified or new files are created */ |
| while (1) { |
| pause(); |
| printf("Got event on fd=%d\n", event_fd); |
| } |
| } |