Example:
import std/inotify when defined(linux): let inotifyFd = inotify_init() # create and get new inotify FileHandle doAssert inotifyFd >= 0 # check for errors let wd = inotifyFd.inotify_add_watch("/tmp", IN_CREATE or IN_DELETE) # Add new watch doAssert wd >= 0 # check for errors discard inotifyFd.inotify_rm_watch(wd) # remove watch
Types
InotifyEvent {.pure, final, importc: "struct inotify_event", header: "<sys/inotify.h>", completeStruct.} = object wd* {.importc: "wd".}: FileHandle ## Watch descriptor. mask* {.importc: "mask".}: uint32 ## Watch mask. cookie* {.importc: "cookie".}: uint32 ## Cookie to synchronize two events. len* {.importc: "len".}: uint32 ## Length (including NULs) of name. name* {.importc: "name".}: UncheckedArray[char] ## Name.
- An Inotify event. Source Edit
Consts
IN_ALL_EVENTS = 4095
- Source Edit
IN_CLOSE_NOWRITE = 0x00000010
- Unwrittable file closed. Source Edit
IN_CLOSE_WRITE = 0x00000008
- Writtable file was closed. Source Edit
IN_DELETE_SELF = 0x00000400
- Self was deleted. Source Edit
IN_DONT_FOLLOW = 0x02000000
- Do not follow a sym link. Source Edit
IN_EXCL_UNLINK = 0x04000000
- Exclude events on unlinked objects. Source Edit
IN_IGNORED = 0x00008000
- File was ignored. Source Edit
IN_MASK_ADD = 0x20000000
- Add to the mask of an already existing watch. Source Edit
IN_MOVE_SELF = 0x00000800
- Self was moved. Source Edit
IN_MOVED_FROM = 0x00000040
- File was moved from X. Source Edit
IN_MOVED_TO = 0x00000080
- File was moved to Y. Source Edit
IN_ONESHOT = 0x0000000080000000'i64
- Only send event once. Source Edit
IN_ONLYDIR = 0x01000000
- Only watch the path if it is a directory. Source Edit
IN_Q_OVERFLOW = 0x00004000
- Event queued overflowed. Source Edit
IN_UNMOUNT = 0x00002000
- Backing fs was unmounted. Source Edit
Procs
proc inotify_init(): FileHandle {.cdecl, importc: "inotify_init", header: "<sys/inotify.h>", ...raises: [], tags: [], forbids: [].}
- Create and initialize inotify instance. Source Edit
proc inotify_init1(flags: cint): FileHandle {.cdecl, importc: "inotify_init1", header: "<sys/inotify.h>", ...raises: [], tags: [], forbids: [].}
- Like inotify_init , but has a flags argument that provides access to some extra functionality. Source Edit
Iterators
iterator inotify_events(evs: pointer; n: int): ptr InotifyEvent {....raises: [], tags: [], forbids: [].}
-
Abstract the packed buffer interface to yield event object pointers.
Example: cmd: -r:off
when defined(linux): import std/posix # needed for FileHandle read procedure const MaxWatches = 8192 let inotifyFd = inotify_init() # create new inotify instance and get it's FileHandle let wd = inotifyFd.inotify_add_watch("/tmp", IN_CREATE or IN_DELETE) # Add new watch var events: array[MaxWatches, byte] # event buffer while (let n = read(inotifyFd, addr events, MaxWatches); n) > 0: # blocks until any events have been read for e in inotify_events(addr events, n): echo (e[].wd, e[].mask, cast[cstring](addr e[].name)) # echo watch id, mask, and name value of each event
Source Edit