Simple Golang inotify wrapper.
-
Low level
Inotify
- wrapper around inotify(7)InotifyEvent
- generated file/folder event. ContainsName
(full path),Wd
- watch descriptor andMask
that describes the event.
-
Higher level
FileWatcher
- higher level utility, helps to watch the list of files for changes, creation or removalDirWatcher
- higher level utility, recursively watches given root folder for added, removed or changed files.FileEvent
- embedsInotifyEvent
and keeps additional fieldEof
to notify user that there will be no more events.
Use FileWatcher
and DirWatcher
as an example and build your own utility classes.
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")
}
MIT. See LICENSE file for more details.