Inotify : module {
Watcher : adt {
path : string;
ctl : ref Iobuf;
events : chan of ref Event;
watch : fn(w : self ref Watcher, log : chan of string);
kill : fn(w : self ref Watcher);
};
Event : adt {
filename : string;
mask : big;
target : string;
matches : fn(e : self ref Event, m : big) : int;
};
new_watcher :fn(path : string, log : chan of string) : ref Watcher;
# taken from inotify.h
ACCESS : con big 16r00000001; # File was accessed
MODIFY : con big 16r00000002; # File was modified
ATTRIB : con big 16r00000004; # Metadata changed
CLOSE_WRITE : con big 16r00000008; # Writable file was closed
CLOSE_NOWRITE : con big 16r00000010; # Unwritable file closed
OPEN : con big 16r00000020; # File was opened
MOVED_FROM : con big 16r00000040; # File was moved from X
MOVED_TO : con big 16r00000080; # File was moved to Y
CREATE : con big 16r00000100; # Subfile was created
DELETE : con big 16r00000200; # Subfile was deleted
DELETE_SELF : con big 16r00000400; # Self was deleted
MOVE_SELF : con big 16r00000800; # Self was moved
# the following are legal events. they are sent as needed to any watch
UNMOUNT : con big 16r00002000; # Backing fs was unmounted
Q_OVERFLOW : con big 16r00004000; # Event queued overflowed
IGNORED : con big 16r00008000; # File was ignored
# special flags
ONLYDIR : con big 16r01000000; # only watch the path if it is a directory
DONT_FOLLOW : con big 16r02000000; # don't follow a sym link
MASK_ADD : con big 16r20000000; # add to the mask of an already existing watch
ISDIR : con big 16r40000000; # event occurred against dir
ONESHOT : con big 16r80000000; # only send event once
};
|