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

fsnotify

package module
v0.9.3 Latest Latest
Warning

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

Go to latest
Published: Jan 1, 2015 License: BSD-3-Clause Imports: 7 Imported by: 4

README

File system notifications for Go

GoDoc

This branch contains fsnotify.v0 which is API-compatible with howeyc/fsnotify. Bugfixes may be backported, but I recommend upgrading.

Cross platform: Windows, Linux, BSD and OS X.

Example:

package main

import (
	"log"

	"gopkg.in/fsnotify.v0"
)

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()

FAQ

When a file is moved 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 (a recursive watcher is in the works #56).

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 (see #7)

Why am I receiving multiple events for the same file on OS X?

Spotlight indexing on OS X can result in multiple events (see #62). A temporary workaround is to add your folder(s) to the Spotlight Privacy settings until we have a native FSEvents implementation (see #54).

How many files can be watched at once?

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 provides a platform-independent interface for file system notifications.

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
}

func (*FileEvent) IsAttrib added in v0.9.0

func (e *FileEvent) IsAttrib() bool

IsAttrib reports whether the FileEvent was triggered by a change in the file metadata.

func (*FileEvent) IsCreate

func (e *FileEvent) IsCreate() bool

IsCreate reports whether the FileEvent was triggered by a creation

func (*FileEvent) IsDelete

func (e *FileEvent) IsDelete() bool

IsDelete reports whether the FileEvent was triggered by a delete

func (*FileEvent) IsModify

func (e *FileEvent) IsModify() bool

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

func (*FileEvent) IsRename

func (e *FileEvent) IsRename() bool

IsRename reports whether the FileEvent was triggered 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 {
	Error chan error // Errors are sent on this channel

	Event chan *FileEvent // Events are returned on this channel
	// contains filtered or unexported fields
}

func NewWatcher

func NewWatcher() (*Watcher, error)

NewWatcher creates and returns a new inotify instance using inotify_init(2)

Example
package main

import (
	"log"

	"github.com/go-fsnotify/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) Close

func (w *Watcher) Close() error

Close closes an inotify watcher instance It sends a message to the reader goroutine to quit and removes all watches associated with the inotify instance

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