dnotify_test.c (808B)
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 9static volatile int event_fd; 10 11static void handler(int sig, siginfo_t *si, void *data) 12{ 13 event_fd = si->si_fd; 14} 15 16int 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}