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