MAILLOCK(3MAIL) User Mailbox Library Functions MAILLOCK(3MAIL)

NAME


maillock, mailunlock, touchlock - functions to manage lockfile(s) for
user's mailbox

SYNOPSIS


cc [ flag ... ] file ... -lmail [ library ... ]
#include <maillock.h>


int maillock(const char *user, int retrycnt);


void mailunlock(void);


void touchlock(void);


DESCRIPTION


The maillock() function attempts to create a lockfile for the user's
mailfile. If a lockfile already exists, and it has not been modified in
the last 5 minutes, maillock() will remove the lockfile and set its own
lockfile.


It is crucial that programs locking mail files refresh their locks at
least every three minutes to maintain the lock. Refresh the lockfile by
calling the touchlock() function with no arguments.


The algorithm used to determine the age of the lockfile takes into
account clock drift between machines using a network file system. A zero
is written into the lockfile so that the lock will be respected by
systems running the standard version of System V.


If the lockfile has been modified in the last 5 minutes the process will
sleep until the lock is available. The sleep algorithm is to sleep for 5
seconds times the attempt number. That is, the first sleep will be for 5
seconds, the next sleep will be for 10 seconds, etc. until the number of
attempts reaches retrycnt.


When the lockfile is no longer needed, it should be removed by calling
mailunlock().


The user argument is the login name of the user for whose mailbox the
lockfile will be created. maillock() assumes that user's mailfiles are in
the ``standard'' place as defined in <maillock.h>.

RETURN VALUES


Upon successful completion, .maillock() returns 0. Otherwise it returns
-1.

FILES


/var/mail/*
user mailbox files


/var/mail/*.lock
user mailbox lockfiles


ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | Unsafe |
+---------------+-----------------+

SEE ALSO


libmail(3LIB), attributes(7)

NOTES


The mailunlock() function will only remove the lockfile created from the
most previous call to maillock(). Calling maillock() for different users
without intervening calls to mailunlock() will cause the initially
created lockfile(s) to remain, potentially blocking subsequent message
delivery until the current process finally terminates.

March 29, 1999 MAILLOCK(3MAIL)