Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <fcntl.h>
  2. #include <limits.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <sys/fanotify.h>
  7. #include <sys/stat.h>
  8. #include <sys/types.h>
  9. #define CHK(expr, errcode) if((expr)==errcode) perror(#expr), exit(EXIT_FAILURE)
  10. int main(int argc, char** argv) {
  11. int fan;
  12. char buf[4096];
  13. char fdpath[32];
  14. char path[PATH_MAX + 1];
  15. ssize_t buflen, linklen;
  16. struct fanotify_event_metadata *metadata;
  17. CHK(fan = fanotify_init(FAN_CLASS_NOTIF, O_RDONLY), -1);
  18. CHK(fanotify_mark(fan, FAN_MARK_ADD | FAN_MARK_MOUNT,
  19. FAN_OPEN | FAN_EVENT_ON_CHILD, AT_FDCWD, "/"), -1);
  20. for (;;) {
  21. CHK(buflen = read(fan, buf, sizeof(buf)), -1);
  22. metadata = (struct fanotify_event_metadata*)&buf;
  23. while(FAN_EVENT_OK(metadata, buflen)) {
  24. if (metadata->mask & FAN_Q_OVERFLOW) {
  25. printf("Queue overflow!\n");
  26. continue;
  27. }
  28. sprintf(fdpath, "/proc/self/fd/%d", metadata->fd);
  29. CHK(linklen = readlink(fdpath, path, sizeof(path) - 1), -1);
  30. path[linklen] = '\0';
  31. printf("%s opened by process %d.\n", path, (int)metadata->pid);
  32. close(metadata->fd);
  33. metadata = FAN_EVENT_NEXT(metadata, buflen);
  34. }
  35. }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement