inotify

package module
v0.0.0-...-f51a75e Latest Latest
Warning

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

Go to latest
Published: Oct 3, 2014 License: BSD-3-Clause Imports: 7 Imported by: 1

README

This repo is a fork of https://godoc.org/code.google.com/p/go.exp/inotify
for solving issue 2483.

----------------

This subrepository holds experimental and deprecated (in the "old"
directory) packages.

The idea for this subrepository originated as the "pkg/exp" directory
of the main repository, but its presence there made it unavailable
to users of the binary downloads of the Go installation. The
subrepository has therefore been created to make it possible to "go
get" these packages.

Warning: Packages here are experimental and unreliable. Some may
one day be promoted to the main repository or other subrepository,
or they may be modified arbitrarily or even disappear altogether.

In short, code in this subrepository is not subject to the Go 1
compatibility promise. (No subrepo is, but the promise is even more
likely to be violated by go.exp than the others.)

Caveat emptor.

----------------

https://code.google.com/p/go/issues/detail?id=2483

- If I am watching a directory, and delete it, and recreate it, 
  and watch it again, any events after that are hosed:
  - the event.Name is incomplete, with the path stripped out e.g. 
    instead of /home/myname/a/b/c/d.txt, I get /d.txt
    instead of /home/myname/a/b/c/, I get ""
  - RemoveWatch fails with message: invalid argument
  - Close() doesn't really close. Most times, the reader goroutine hangs.

Documentation

Overview

Package inotify implements a wrapper for the Linux inotify system.

Example:

watcher, err := inotify.NewWatcher()
if err != nil {
    log.Fatal(err)
}
err = watcher.Watch("/tmp")
if err != nil {
    log.Fatal(err)
}
for {
    select {
    case ev := <-watcher.Event:
        log.Println("event:", ev)
    case err := <-watcher.Error:
        log.Println("error:", err)
    }
}

Note from inotify(7):

IN_IGNORED        Watch  was removed explicitly (inotify_rm_watch(2)) or
                  automatically (file was deleted, or file system was unmounted).

You will receive the event in case of not only RemoveWatch() but also remove a watch file / directory. In addition to it, you will receive IN_IGNORED if IN_ONESHOT flag to AddWatch().

Index

Constants

View Source
const (

	// Options for AddWatch
	IN_DONT_FOLLOW uint32 = syscall.IN_DONT_FOLLOW
	IN_ONESHOT     uint32 = syscall.IN_ONESHOT
	IN_ONLYDIR     uint32 = syscall.IN_ONLYDIR

	// Events
	IN_ACCESS        uint32 = syscall.IN_ACCESS
	IN_ALL_EVENTS    uint32 = syscall.IN_ALL_EVENTS
	IN_ATTRIB        uint32 = syscall.IN_ATTRIB
	IN_CLOSE         uint32 = syscall.IN_CLOSE
	IN_CLOSE_NOWRITE uint32 = syscall.IN_CLOSE_NOWRITE
	IN_CLOSE_WRITE   uint32 = syscall.IN_CLOSE_WRITE
	IN_CREATE        uint32 = syscall.IN_CREATE
	IN_DELETE        uint32 = syscall.IN_DELETE
	IN_DELETE_SELF   uint32 = syscall.IN_DELETE_SELF
	IN_MODIFY        uint32 = syscall.IN_MODIFY
	IN_MOVE          uint32 = syscall.IN_MOVE
	IN_MOVED_FROM    uint32 = syscall.IN_MOVED_FROM
	IN_MOVED_TO      uint32 = syscall.IN_MOVED_TO
	IN_MOVE_SELF     uint32 = syscall.IN_MOVE_SELF
	IN_OPEN          uint32 = syscall.IN_OPEN

	// Special events
	IN_ISDIR      uint32 = syscall.IN_ISDIR
	IN_IGNORED    uint32 = syscall.IN_IGNORED
	IN_Q_OVERFLOW uint32 = syscall.IN_Q_OVERFLOW
	IN_UNMOUNT    uint32 = syscall.IN_UNMOUNT
)
View Source
const EPOLL_MAX_EVENTS = 64

Variables

This section is empty.

Functions

This section is empty.

Types

type Event

type Event struct {
	Mask   uint32 // Mask of events
	Cookie uint32 // Unique cookie associating related events (for rename(2))
	Name   string // File name (optional)
}

func (*Event) String

func (e *Event) String() string

String formats the event e in the form "filename: 0xEventMask = IN_ACCESS|IN_ATTRIB_|..."

type Watcher

type Watcher struct {
	Error chan error  // Errors are sent on this channel
	Event chan *Event // 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)

func (*Watcher) AddWatch

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

AddWatch adds path to the watched file set. The flags are interpreted as described in inotify_add_watch(2).

func (*Watcher) AddWatchFilter

func (w *Watcher) AddWatchFilter(path string, flags uint32, filter func(*Event) bool) error

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

RemoveWatch removes path from the watched file set.

func (*Watcher) Watch

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

Watch adds path to the watched file set, watching all events.

func (*Watcher) WatchFilter

func (w *Watcher) WatchFilter(path string, filter func(*Event) bool) error

Jump to

Keyboard shortcuts

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