Fixed a typo, added a howto to the README.
authorOlof-Joachim Frahm <Olof.Frahm@web.de>
Fri, 18 Dec 2009 20:38:12 +0000 (21:38 +0100)
committerOlof-Joachim Frahm <Olof.Frahm@web.de>
Fri, 18 Dec 2009 20:38:12 +0000 (21:38 +0100)
README
inotify.lisp
package.lisp

diff --git a/README b/README
index 662af2a..c35c24e 100644 (file)
--- a/README
+++ b/README
@@ -1,11 +1,62 @@
-CL-NOTIFY
+CL-NOTIFY - Interface to the linux inotify API.
 
-Interface to the linux inotify API.  Working, but unfinished.
+Copyright (C) 2009 Olof-Joachim Frahm
+Released under the GPL3 (or any later version).
 
+Working, but unfinished.
 Implementations currently supported: SBCL
 
-Uses the binary-types library (ASDF enhanced from
-http://github.com/Ferada/cl-notify or see http://www.cliki.net/Binary-types).
+Uses CFFI, the binary-types (ASDF enhanced from
+http://github.com/Ferada/cl-notify or see
+http://www.cliki.net/Binary-types) and utils-frahm
+(http://github.com/Ferada/utils-frahm) libraries.
 
-Copyright (C) 2009 Olof-Joachim Frahm
-Released under the GPL3 (or any later version).
+
+HOWTO
+
+After loading the library use MAKE-NOTIFY to create a new event queue.
+The NONBLOCKING argument currently determines if we use the standard
+CL:LISTEN function or SB-UNIX:UNIX-READ to check for available events.
+
+The result of MAKE-NOTIFY is used with WATCH and UNWATCH, the first
+being used to watch a file or directory, the second to stop watching
+it.  The FLAGS parameter of WATCH is described in the notify(7) manpage;
+you can use a combination of the flags (as keywords) to create a
+suitable bitmask.
+
+For example, to watch for modified or closed files in a directory, call
+(WATCH notify "foo/" '(:modify :close)).
+
+The result of WATCH is a handle (currently a FIXNUM, but I wouldn't rely
+on that) which can be fed to UNWATCH, but isn't useful for anything
+else.
+
+To finally get the events from the queue, use READ-EVENT (which blocks)
+or NEXT-EVENT (which doesn't block).  EVENT-AVAILABLEP does what it
+should do, NEXT-EVENTS retrieves all currently available events as a
+list and DO-EVENTS (nonblocking) iterates over available events.
+
+The enhanced API registers all watched paths in a table, so you can use
+WATCHEDP to check if a pathname (exact match) is being watched and
+LIST-WATCHED to return all watched paths as a list.
+
+UNWATCH has to be called with the path or the handle of the watched file
+or directory (a path'll looked up in the same table as with WATCHEDP).
+
+
+The raw API, which doesn't register watched paths, consists of
+READ-RAW-EVENT-FROM-STREAM, READ-EVENT-FROM-STREAM, WATCH-RAW and
+UNWATCH-RAW.  They are just a thin wrapper around the C functions, but
+I've exported them in case someone doesn't like the upper layers.
+
+
+TODO
+
+- more functionality to examine read events
+- extend to other APIs?
+- make things more implementation independent
+- (maybe) don't use the libc for this, direct syscall
+
+DONE
+- easier interface for (e)poll/select maybe using iolib (done, using
+  CL:LISTEN and/or SB-UNIX:UNIX-READ)
index be9d9c6..ebeadfc 100644 (file)
@@ -109,7 +109,7 @@ NAME optionally identifies a file relative to a watched directory."
 
 ;;;; basic wrapping of the API
 
-(defun read-raw-event (stream)
+(defun read-raw-event-from-stream (stream)
   "Reads a raw event from the inotify stream."
   (let* ((event (binary-types:read-binary 'inotify-event stream))
         (len (binary-types:read-binary 'binary-types:u32 stream)))
@@ -122,7 +122,7 @@ NAME optionally identifies a file relative to a watched directory."
 
 (defun read-event-from-stream (stream)
   "Reads a event from the inotify stream and converts bitmasks on reading."
-  (let ((event (read-raw-event stream)))
+  (let ((event (read-raw-event-from-stream stream)))
     (with-slots (mask) event
       (setf mask (foreign-bitfield-symbols 'inotify-flag mask)))
     event))
index 0f7b202..5978614 100644 (file)
@@ -7,11 +7,14 @@
           #:inotify-read-flag
           #:inotify-add-flag
 
+          ;;; very raw
+          #:read-raw-event-from-stream
+
           #:close-notify
 
           ;;; event parsing functions
           #:make-unregistered-notify
-          #:read-raw-event
+          #:read-event-from-stream
           #:watch-raw
           #:unwatch-raw