DragonFly On-Line Manual Pages
WAIT_ON(1) DragonFly General Commands Manual WAIT_ON(1)
NAME
wait_on - wait for a file or directory to be changed
SYNOPSIS
wait_on [-c] [-h] [-i] [-v] [-w] [-t timeout] file ...
DESCRIPTION
The wait_on command waits for something to happen to the files or
directories given as arguments and then exits. It is anticipated that the
wait_on command will be called from a shell script, allowing, for
example, a script to sleep until files have been added to a directory or
data is appended to a file. No polling is required.
The following options are available:
-c Print version string, copyright notice and exit.
-h Write information about changes to the standard output (possibly
for for a human to read).
-i Exit with an exit value that indicates to which file or directory
an event has occured.
-v Print version string, copyright notice and exit.
-w Only exit when something is written (i.e. ignore all other types
of events). Writing includes a file being added to a directory.
-t Wait for timeout seconds for an event to occur and if none has
exit anyway. The timeout value may be 0 to effect an odd kind of
poll.
The wait_on command must be able to open file for reading.
IMPLEMENTATION NOTES
The wait_on command is implemented using the facilities provided by
kqueue(3).
EXIT VALUES
If a fatal error occurs wait_on exists with a value documented in
sysexits(3).
An exit value of 0 indicates a timeout has occured.
If the -i flag is in effect then the exit value of wait_on indicates to
which argument the exit causing event has occured. A value of 1 indicates
the event occured to the first file or directory, 2 indicating the event
occured to the second file or directory and so on.
If the -i flag is not in effect the exit value of wait_on is dependent on
what event caused wait_on to exit.
0 timeout seconds have elapsed with no reportable events occuring.
1 The file or directory file was deleted. See unlink(2).
2 The file file was written to or, if file is a directory, a file
was added to or removed from file.
3 The file or directory file was extended. See truncate(2).
4 The attributes of file have changed. This includes permissions
and file flags. See chmod(2) and chflags(2).
5 The link count of file has changed. See link(2).
6 The file or directory file has been renamed. See rename(2).
7 Access to the file or directory file has been revoked. See
revoke(2) and unmount(2).
EXAMPLES
1. The following example will watch your mailbox and tell you if it is
written to (as is the case when new mail arrives).
wait_on -hw $MAIL
The output might be something like:
/var/mail/andrew: written extended
wait_on would then exit with code 2.
2. The following example could be used as a basis of a script to
regularly clear out the incoming directory of an FTP site.
SOURCE=/ftp/root/incoming
DESTINATION=/ftp/uploaded_files
while :; do
mv $SOURCE/* $DESTINATION
wait_on -w $SOURCE
done
You must NOT use this script as is on a directory that untrusted
users may write to. Security problems abound!
3. The following example demonstrates the use of the -i and -t flags.
It displays a message indicating which, if either, of the files
whose names are stored in FILE1 or FILE2 changes first, timing out
after one minute.
FILE1=1
FILE2=2
wait_on -t 60 -i $FILE1 $FILE2
case $? in
0)
echo Neither the file $FILE1 or the file $FILE2 changed.
;;
1)
echo File $FILE1 has been changed.
;;
2)
echo File $FILE2 has been changed.
;;
esac
DIAGNOSTICS
For exit values see the EXIT VALUES section.
invalid timeout The argument given to -t was not parsable as an integer
between 0 and LONG_MAX inclusive.
can't open file for reading To monitor files or directories wait_on must
be able to open them for reading.
-i specified with >= 64 files - exit code may be ambiguous If you use
the -i flag and specify a lot of files it is possible that wait_on may
exit with a value that is both defined in sysexits(3) and is also the
valid index of an argument. This is ambiguous. A warning is produced but
the action is allowed.
unknown event of type 7 occured to file an event has occured to a
monitored file or directory of a type that wait_on doesn't recognise.
event on unknown file (file) wait_on has been informed that an event
occured on a file that it wasn't monitoring. This should never occur.
SEE ALSO
newmail(1), kqueue(3)
HISTORY
The wait_on command was written in January 2002. wait_on was written
under FreeBSD 4.4.
AUTHORS
Andrew Stevenson <andrew@ugh.net.au>
BUGS
It is not easy to find out which event happend to which file. Normally
you can find out one or the other. The workaround is to use the -h flag
and parse the output.
The wait_on command uses kqueue(3) and at the time of this writing
kqueue(3) could only monitor files on UFS filesystems.
Please report any other problems or requests for enhancements to
<andrew@ugh.net.au>.
UgH! January 29, 2002 UgH!