Help us shape the future of Go! Take the 2026 Go Developer Survey

fsnotify

package module
v0.8.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 19, 2013 License: BSD-3-Clause Imports: 7 Imported by: 4

README

File system notifications for Go

Build Status

GoDoc

Cross platform, works on:

  • Windows
  • Linux
  • BSD
  • OSX

Example:

package main

import (
	"log"

	"github.com/howeyc/fsnotify"
)

func main() {
	watcher, err := fsnotify.NewWatcher()
	if err != nil {
		log.Fatal(err)
	}

	done := make(chan bool)

	// Process events
	go func() {
		for {
			select {
			case ev := <-watcher.Event:
				log.Println("event:", ev)
			case err := <-watcher.Error:
				log.Println("error:", err)
			}
		}
	}()

	err = watcher.Watch("testDir")
	if err != nil {
		log.Fatal(err)
	}

	<-done

	/* ... do stuff ... */
	watcher.Close()
}

For each event:

  • Name
  • IsCreate()
  • IsDelete()
  • IsModify()
  • IsRename()

Notes:

  • When a file is renamed to another directory is it still being watched?
    • No (it shouldn't be, unless you are watching where it was moved to).
  • When I watch a directory, are all subdirectories watched as well?
    • No, you must add watches for any directory you want to watch.
  • Do I have to watch the Error and Event channels in a separate goroutine?
    • As of now, yes. Looking into making this single-thread friendly.
  • There are OS-specific limits as to how many watches can be created:
    • Linux: /proc/sys/fs/inotify/max_user_watches contains the limit, reaching this limit results in a "no space left on device" error.
    • BSD / OSX: sysctl variables "kern.maxfiles" and "kern.maxfilesperproc", reaching these limits results in a "too many open files" error.

Documentation

Overview

Package fsnotify implements filesystem notification.

Index

Examples

Constants

View Source
const (
	FSN_CREATE = 1
	FSN_MODIFY = 2
	FSN_DELETE = 4
	FSN_RENAME = 8

	FSN_ALL = FSN_MODIFY | FSN_DELETE | FSN_RENAME | FSN_CREATE
)

Variables

This section is empty.

Functions

This section is empty.

Types

type FileEvent

type FileEvent struct {
	Name string // File name (optional)
	// contains filtered or unexported fields
}

Event is the type of the notification messages received on the watcher's Event channel.

func (*FileEvent) IsCreate

func (e *FileEvent) IsCreate() bool

IsCreate reports whether the FileEvent was triggerd by a creation

func (*FileEvent) IsDelete

func (e *FileEvent) IsDelete() bool

IsDelete reports whether the FileEvent was triggerd by a delete

func (*FileEvent) IsModify

func (e *FileEvent) IsModify() bool

IsModify reports whether the FileEvent was triggerd by a file modification or attribute change

func (*FileEvent) IsRename

func (e *FileEvent) IsRename() bool

IsRename reports whether the FileEvent was triggerd by a change name

func (*FileEvent) String

func (e *FileEvent) String() string

String formats the event e in the form "filename: DELETE|MODIFY|..."

type Watcher

type Watcher struct {
	Event chan *FileEvent // Events are returned on this channel
	Error chan error      // Errors are sent on this channel
	// contains filtered or unexported fields
}

A Watcher waits for and receives event notifications for a specific set of files and directories.

func NewWatcher

func NewWatcher() (*Watcher, error)

NewWatcher creates and returns a Watcher.

Example
package main

import (
	"log"

	"github.com/howeyc/fsnotify"
)

func main() {
	watcher, err := fsnotify.NewWatcher()
	if err != nil {
		log.Fatal(err)
	}

	go func() {
		for {
			select {
			case ev := <-watcher.Event:
				log.Println("event:", ev)
			case err := <-watcher.Error:
				log.Println("error:", err)
			}
		}
	}()

	err = watcher.Watch("/tmp/foo")
	if err != nil {
		log.Fatal(err)
	}
}

func (*Watcher) AddWatch

func (w *Watcher) AddWatch(path string, flags uint32) error

AddWatch adds path to the watched file set.

func (*Watcher) Close

func (w *Watcher) Close() error

Close closes a Watcher. It sends a message to the reader goroutine to quit and removes all watches associated with the watcher.

func (*Watcher) RemoveWatch

func (w *Watcher) RemoveWatch(path string) error

Remove a watch on a file

func (*Watcher) Watch

func (w *Watcher) Watch(path string) error

Watch a given file path

func (*Watcher) WatchFlags

func (w *Watcher) WatchFlags(path string, flags uint32) error

Watch a given file path for a particular set of notifications (FSN_MODIFY etc.)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL