Inotify backend
===============

Extended API for the inotify subsystem. +
Original documentation about inotify can be found here http://linux.die.net/man/7/inotify
and is valid in this API unless stated otherwise.

Data structures
---------------

* `struct inotify_event`
+
--
Represents an inotify event.

`wd`::
    Identifies the watch for which this event occurs. +
    It is one of the watch descriptors returned by a previous call to `inotify_backend_watch()`

`mask`::
    Contains a bitmask value that describe the event that occurred (See event macros below)

`cookie`::
    Cookie to synchronize two (`IN_MOVED_FROM`, `IN_MOVED_TO`) events.

`len`::
    Length (including NULs) of name.

`name`::
    The name field is only present when an event is returned for a file inside a watched directory
    it identifies the file pathname relative to the watched directory. +
    This pathname is null-terminated, and may include further null bytes to align subsequent reads to a suitable address boundary.
--

Macros
------

`IN_EVENT_SIZE`::

    Avarange size of the `inotify_event` structure. +
    Usefull when allocating the buffer used for `inotify_read()`

Events
~~~~~~

`IN_ACCESS`::

    file/directory was accessed in some way.

`IN_MODIFY`::

    file/directory was modified.

`IN_ATTRIB`::

    The file/directory's metadata was changed.

`IN_CLOSE_WRITE`::

    The file was closed and written to.

`IN_CLOSE_NOWRITE`::

    The file was closed but unchanged.

`IN_OPEN`::

    The file was opened.

`IN_MOVED_FROM`::

    File/Directory was moved from this location.

`IN_MOVED_TO`::

    File/Directory was moved to this location.

`IN_CREATE`::

    A file/directory was created.

`IN_DELETE`::

    A file/directory was deleted.

`IN_DELETE_SELF`::

    The watch itself was deleted.

`IN_MOVE_SELF`::

    The watch itself was moved.

`IN_UNMOUNT`::

    Backing filesystem was unmounted.

`IN_Q_OVERFLOW`::

    Event queued overflowed.
+
NOTE: there is no watch descriptor for this event.

`IN_IGNORED`::

    Watch has been ignored.

Helper events
~~~~~~~~~~~~~

`IN_MOVE`::

    File/Directory was moved. (will match both `IN_MOVED_FROM` and `IN_MOVED_TO`)

`IN_CLOSE`::

    The file was closed. (will match both `IN_CLOSE_WRITE` and `IN_CLOSE_NOWRITE`).

Flags
~~~~~

`IN_ISDIR`::

    Event was triggered on a directory.

Functions
---------

`inotify_backend_init()`::

    Initialize inotify. +
    On success a valid inotify file descriptor is returned, otherwise
    a negative value is returned and 'errno' is set to indicate the error.

`inotify_backend_exit()`::

    Cleans up and closes the inotify file descriptor.

`inotify_backend_watch()`::

    Begin watching 'path' for events. +
    On success the watch descriptor that has been asigned to this path is returned, otherwise
    a negative value is returned and 'errno' is set to indicate the error.

`inotify_backend_ignore()`::

    Stop watching 'path'. +
    On success zero is returned, otherwise a negative value is returned and 'errno' is
    set to indicate the error.

`inotify_backend_read()`::

    Reads events from inotify. This function is non-blocking. +
    On success returns the number of bytes read, otherwise a negative value
    is returned and 'errno' is set to indicate the error.
