Skip to content

Latest commit

 

History

History
71 lines (51 loc) · 1.8 KB

README.md

File metadata and controls

71 lines (51 loc) · 1.8 KB

Gonotify

Simple Golang inotify wrapper.

GoDoc

Provides following primitives:

  • Low level

    • Inotify - wrapper around inotify(7)
    • InotifyEvent - generated file/folder event. Contains Name (full path), Wd - watch descriptor and Mask that describes the event.
  • Higher level

    • FileWatcher - higher level utility, helps to watch the list of files for changes, creation or removal
    • DirWatcher - higher level utility, recursively watches given root folder for added, removed or changed files.
    • FileEvent - embeds InotifyEvent and keeps additional field Eof to notify user that there will be no more events.

Use FileWatcher and DirWatcher as an example and build your own utility classes.

Usage

package main

import (
  "fmt"
  "github.com/illarion/gonotify/v3"
  "time"
  "context"
)

func main() {

  ctx, cancel := context.WithCancel(context.Background())

  watcher, err := gonotify.NewDirWatcher(ctx, gonotify.IN_CREATE|gonotify.IN_CLOSE, "/tmp")
  if err != nil {
    panic(err)
  }

  main:
  for {
    select {
    case event := <-watcher.C:
      fmt.Printf("Event: %s\n", event)

      if event.Is(gonotify.IN_CREATE) {
        fmt.Printf("File created: %s\n", event.Name)
      }

      if event.IsAny(gonotify.IN_CLOSE, gonotify.IN_CLOSE_WRITE) {
        fmt.Printf("File closed: %s\n", event.Name)
      }

    case <-time.After(5 * time.Second):
      fmt.Println("Good bye!")
      cancel()
      break main
    }
  }
  
  // Wait for watcher to finish all internal goroutines
  <-watcher.Done()
  fmt.Println("Watcher is done")
  
}

License

MIT. See LICENSE file for more details.