fswatch 1.17.1
inotify_monitor.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014-2015 Enrico M. Crisostomo
3 *
4 * This program is free software; you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License as published by the Free Software
6 * Foundation; either version 3, or (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
11 * details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program. If not, see <http://www.gnu.org/licenses/>.
15 */
26#ifndef FSW_INOTIFY_MONITOR_H
27# define FSW_INOTIFY_MONITOR_H
28
29# include "monitor.hpp"
30# include <sys/inotify.h>
31# include <string>
32# include <vector>
33# include <sys/stat.h>
34
35namespace fsw
36{
41 struct inotify_monitor_impl;
42
49 class inotify_monitor : public monitor
50 {
51 public:
55 inotify_monitor(std::vector<std::string> paths,
57 void *context = nullptr);
58
62 virtual ~inotify_monitor();
63
64 protected:
72 void run();
73
74 private:
75 inotify_monitor(const inotify_monitor& orig) = delete;
76 inotify_monitor& operator=(const inotify_monitor& that) = delete;
77
78 void scan_root_paths();
79 bool is_watched(const std::string& path) const;
80 void preprocess_dir_event(struct inotify_event *event);
81 void preprocess_event(struct inotify_event *event);
82 void preprocess_node_event(struct inotify_event *event);
83 void scan(const std::string& path, const bool accept_non_dirs = true);
84 bool add_watch(const std::string& path,
85 const struct stat& fd_stat);
86 void process_pending_events();
87 void remove_watch(int fd);
88
90 };
91}
92
93#endif /* FSW_INOTIFY_MONITOR_H */
Type representing a file change event.
Definition: event.hpp:48
Solaris/Illumos monitor.
Definition: inotify_monitor.hpp:50
virtual ~inotify_monitor()
Destroys an instance of this class.
Definition: inotify_monitor.cpp:87
inotify_monitor(std::vector< std::string > paths, FSW_EVENT_CALLBACK *callback, void *context=nullptr)
Constructs an instance of this class.
Definition: inotify_monitor.cpp:72
void run()
Executes the monitor loop.
Definition: inotify_monitor.cpp:378
Base class of all monitors.
Definition: monitor.hpp:148
std::vector< std::string > paths
List of paths to watch.
Definition: monitor.hpp:534
void * context
Pointer to context data that will be passed to the monitor::callback.
Definition: monitor.hpp:554
FSW_EVENT_CALLBACK * callback
Callback to which change events should be notified.
Definition: monitor.hpp:549
Header of the fsw::monitor class.
Main namespace of libfswatch.
Definition: event.cpp:24
void FSW_EVENT_CALLBACK(const std::vector< event > &, void *)
Function definition of an event callback.
Definition: monitor.hpp:61
Definition: inotify_monitor.cpp:41