Skip to content
forked from notify-rs/notify

Cross-platform filesystem notification library for Rust

Notifications You must be signed in to change notification settings

julienw/rsnotify

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Notify

Crate version Crate license Crate download count

Appveyor (Windows) Travis (Linux and OS X)

Code of Conduct

Cross-platform filesystem notification library for Rust.

Install

[dependencies]
notify = "^2.5.0"

Usage

extern crate notify;

use notify::{RecommendedWatcher, Error, Watcher};
use std::sync::mpsc::channel;

fn main() {
  // Create a channel to receive the events.
  let (tx, rx) = channel();

  // Automatically select the best implementation for your platform.
  // You can also access each implementation directly e.g. INotifyWatcher.
  let w: Result<RecommendedWatcher, Error> = Watcher::new(tx);

  match w {
    Ok(mut watcher) => {
      // Add a path to be watched. All files and directories at that path and
      // below will be monitored for changes.
      watcher.watch("/home/test/notify");

      // You'll probably want to do that in a loop. The type to match for is
      // notify::Event, look at src/lib.rs for details.
      match rx.recv() {
        _ => println!("Recv.")
      }
    },
    Err(_) => println!("Error")
  }
}

Platforms

  • Linux / Android: inotify
  • OS X: FSEvent
  • Windows: ReadDirectoryChangesW
  • All platforms: polling

Limitations

FSEvent

Due to the inner security model of FSEvent (see FileSystemEventSecurity), some event cannot be observed easily when trying to follow files that do not belong to you. In this case, reverting to the pollwatcher can fix the issue, with a slight performance cost.

Todo

  • BSD / OS X / iOS: kqueue
  • Solaris 11: FEN

Pull requests and bug reports happily accepted!

Origins

Inspired by Go's fsnotify, born out of need for cargo watch, and general frustration at the non-existence of C/Rust cross-platform notify libraries.

Written by Félix Saparelli and awesome contributors, and released in the Public Domain using the Creative Commons Zero Declaration.

About

Cross-platform filesystem notification library for Rust

Resources

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%