If you are reading this, you use `master` branch of this repository,
which is wrong.
fsnotify utilizes [golang.org/x/sys](https://godoc.org/golang.org/x/sys) rather than `syscall` from the standard library. Ensure you have the latest version installed by running:
Please see [the documentation](https://godoc.org/github.com/fsnotify/fsnotify) and consult the [FAQ](#faq) for usage information.
## API stability
fsnotify is a fork of [howeyc/fsnotify](https://godoc.org/github.com/howeyc/fsnotify) with a new API as of v1.0. The API is based on [this design document](http://goo.gl/MrYxyA).
All [releases](https://github.com/fsnotify/fsnotify/releases) are tagged based on [Semantic Versioning](http://semver.org/). Further API changes are [planned](https://github.com/fsnotify/fsnotify/milestones), and will be tagged with a new major revision number.
Go 1.6 supports dependencies located in the `vendor/` folder. Unless you are creating a library, it is recommended that you copy fsnotify into `vendor/github.com/fsnotify/fsnotify` within your project, and likewise for `golang.org/x/sys`.
You should switch to using the default branch instead.
## Usage
## Using git
```go
packagemain
Here's how to switch your existing local copy of this repository from `master`
to `main` (assuming the remote name is `origin`):
import(
"log"
"github.com/fsnotify/fsnotify"
)
funcmain(){
watcher,err:=fsnotify.NewWatcher()
iferr!=nil{
log.Fatal(err)
}
deferwatcher.Close()
done:=make(chanbool)
gofunc(){
for{
select{
caseevent,ok:=<-watcher.Events:
if!ok{
return
}
log.Println("event:",event)
ifevent.Op&fsnotify.Write==fsnotify.Write{
log.Println("modified file:",event.Name)
}
caseerr,ok:=<-watcher.Errors:
if!ok{
return
}
log.Println("error:",err)
}
}
}()
err=watcher.Add("/tmp/foo")
iferr!=nil{
log.Fatal(err)
}
<-done
}
```
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
```
## Contributing
Please refer to [CONTRIBUTING][] before opening an issue or pull request.
## Example
See [example_test.go](https://github.com/fsnotify/fsnotify/blob/master/example_test.go).
## 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 on the roadmap [#18][]).
**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 [howeyc #7][#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 [howeyc #62][#62]). A temporary workaround is to add your folder(s) to the *Spotlight Privacy settings* until we have a native FSEvents implementation (see [#11][]).
**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.
**Why don't notifications work with NFS filesystems or filesystem in userspace (FUSE)?**
fsnotify requires support from underlying OS to work. The current NFS protocol does not provide network level support for file notifications.