dnotify_test.c 772 B

12345678910111213141516171819202122232425262728293031323334
  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. static volatile int event_fd;
  8. static void handler(int sig, siginfo_t *si, void *data)
  9. {
  10. event_fd = si->si_fd;
  11. }
  12. int main(void)
  13. {
  14. struct sigaction act;
  15. int fd;
  16. act.sa_sigaction = handler;
  17. sigemptyset(&act.sa_mask);
  18. act.sa_flags = SA_SIGINFO;
  19. sigaction(SIGRTMIN + 1, &act, NULL);
  20. fd = open(".", O_RDONLY);
  21. fcntl(fd, F_SETSIG, SIGRTMIN + 1);
  22. fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT);
  23. /* we will now be notified if any of the files
  24. in "." is modified or new files are created */
  25. while (1) {
  26. pause();
  27. printf("Got event on fd=%d\n", event_fd);
  28. }
  29. }