| // SPDX-License-Identifier: GPL-2.0 | |
| #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); | |
| } | |
| } |