(v0.19-24-g0617ca1 with changes)
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/fanotify.h>
#include <unistd.h>
Go to the source code of this file.
 | 
| #define  | _GNU_SOURCE   /* Needed to get O_LARGEFILE definition */ | 
|   | 
◆ _GNU_SOURCE
      
        
          | #define _GNU_SOURCE   /* Needed to get O_LARGEFILE definition */ | 
        
      
 
 
◆ handle_events()
  
  
      
        
          | static void handle_events  | 
          ( | 
          int  | 
          fd | ) | 
           | 
         
       
   | 
  
static   | 
  
 
Definition at line 14 of file fanotify_watch.cpp.
   15     const struct fanotify_event_metadata *metadata;
 
   16     struct fanotify_event_metadata buf[200];
 
   20     char procfd_path[PATH_MAX];
 
   21     struct fanotify_response response;
 
   29         len = read(fd, (
void *) &buf, 
sizeof(buf));
 
   30         if (len == -1 && errno != EAGAIN) {
 
   47         while (FAN_EVENT_OK(metadata, len)) {
 
   51             if (metadata->vers != FANOTIFY_METADATA_VERSION) {
 
   53                         "Mismatch of fanotify metadata version.\n");
 
   61             if (metadata->fd >= 0) {
 
   66                 if (metadata->mask & FAN_OPEN_PERM) {
 
   67                     printf(
"FAN_OPEN_PERM: ");
 
   71                     response.fd = metadata->fd;
 
   72                     response.response = FAN_ALLOW;
 
   74                           sizeof(
struct fanotify_response));
 
   79                 if (metadata->mask & FAN_CLOSE_WRITE) {
 
   80                     printf(
"FAN_CLOSE_WRITE: ");
 
   85                 snprintf(procfd_path, 
sizeof(procfd_path),
 
   86                          "/proc/self/fd/%d", metadata->fd);
 
   87                 path_len = readlink(procfd_path, path,
 
   94                 path[path_len] = 
'\0';
 
   95                 printf(
"File %s\n", path);
 
  104             metadata = FAN_EVENT_NEXT(metadata, len);
 
 
Referenced by main().
 
 
◆ main()
      
        
          | int main  | 
          ( | 
          int  | 
          argc,  | 
        
        
           | 
           | 
          char *  | 
          argv[]  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Definition at line 110 of file fanotify_watch.cpp.
  114     struct pollfd fds[2];
 
  119         fprintf(stderr, 
"Usage: %s MOUNT\n", argv[0]);
 
  123     printf(
"Press enter key to terminate.\n");
 
  127     fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT | FAN_NONBLOCK,
 
  128                        O_RDONLY | O_LARGEFILE);
 
  130         perror(
"fanotify_init");
 
  139     if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,
 
  140                       FAN_CLOSE_WRITE, AT_FDCWD,
 
  142         perror(
"fanotify_mark");
 
  152     fds[0].fd = STDIN_FILENO;
 
  153     fds[0].events = POLLIN;
 
  158     fds[1].events = POLLIN;
 
  161     printf(
"Listening for events.\n");
 
  164         poll_num = poll(fds, nfds, -1);
 
  165         if (poll_num == -1) {
 
  166             if (errno == EINTR) {   
 
  175             if (fds[0].revents & POLLIN) {
 
  179                 while (read(STDIN_FILENO, &buf, 1) > 0 && buf != 
'\n') {
 
  185             if (fds[1].revents & POLLIN) {
 
  192                 if (fds[0].revents & POLLIN) {
 
  196                     while (read(STDIN_FILENO, &buf, 1) > 0 && buf != 
'\n') {
 
  202                 if (fds[1].revents & POLLIN) {
 
  211         printf(
"Listening for events stopped.\n");
 
 
References handle_events().