35 lines
		
	
	
	
		
			772 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
	
		
			772 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #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); | ||
|  | 	} | ||
|  | } |