Skip to main content

read_events

Function read_events 

Source
pub fn read_events(fd: &Fd) -> Result<Vec<InotifyEvent>, CoreError>
Expand description

Read all available inotify events from the descriptor.

This function drains the inotify file descriptor until no more events are available (EAGAIN). It is safe to use with edge-triggered reactors.

ยงErrors

Returns CoreError if a read syscall fails (excluding EAGAIN/EWOULDBLOCK).

Examples found in repository?
examples/watch_temp.rs (line 23)
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let mut reactor = Reactor::new()?;
7    let (inotify_fd, inotify_token) = reactor.setup_inotify()?;
8
9    let temp_dir = std::env::temp_dir();
10    let temp_dir_str = temp_dir.to_string_lossy().into_owned();
11
12    println!("Watching {} for modifications...", temp_dir_str);
13    add_watch(&inotify_fd, &temp_dir_str, MODIFY_MASK)?;
14
15    let mut events = Vec::new();
16    // Monitor for 10 seconds
17    let start = std::time::Instant::now();
18    while start.elapsed() < Duration::from_secs(10) {
19        let n = reactor.wait(&mut events, 64, 1000)?;
20        if n > 0 {
21            for ev in &events {
22                if ev.token == inotify_token {
23                    let in_events = read_events(&inotify_fd)?;
24                    for ie in in_events {
25                        if let Some(name) = ie.name {
26                            println!("File modified: {}", String::from_utf8_lossy(&name));
27                        } else {
28                            println!("Directory modified (wd={})", ie.wd);
29                        }
30                    }
31                }
32            }
33        }
34    }
35
36    println!("Finished watching.");
37    Ok(())
38}