1 // SPDX-License-Identifier: GPL-2.0 2 #define _GNU_SOURCE /* needed to get the defines */ 3 #include <fcntl.h> /* in glibc 2.2 this has the needed 4 values defined */ 5 #include <signal.h> 6 #include <stdio.h> 7 #include <unistd.h> 8 9 static volatile int event_fd; 10 11 static void handler(int sig, siginfo_t *si, void *data) 12 { 13 event_fd = si->si_fd; 14 } 15 16 int main(void) 17 { 18 struct sigaction act; 19 int fd; 20 21 act.sa_sigaction = handler; 22 sigemptyset(&act.sa_mask); 23 act.sa_flags = SA_SIGINFO; 24 sigaction(SIGRTMIN + 1, &act, NULL); 25 26 fd = open(".", O_RDONLY); 27 fcntl(fd, F_SETSIG, SIGRTMIN + 1); 28 fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT); 29 /* we will now be notified if any of the files 30 in "." is modified or new files are created */ 31 while (1) { 32 pause(); 33 printf("Got event on fd=%d\n", event_fd); 34 } 35 } 36