uucplock(3)
NAME
- uu_lock, uu_unlock, uu_lockerr - acquire and release control
 - of a serial
device 
LIBRARY
System Utilities Library (libutil, -lutil)
SYNOPSIS
#include <sys/types.h> #include <libutil.h> int uu_lock(const char *ttyname); int uu_lock_txfr(const char *ttyname, pid_t pid); int uu_unlock(const char *ttyname); const char * uu_lockerr(int uu_lockresult);
DESCRIPTION
- The uu_lock() function attempts to create a lock file called /var/spool/lock/LCK.. with a suffix given by the passed
 - ttyname.  If the
file already exists, it is expected to contain the process - id of the
locking program. - If the file does not already exist, or the owning process
 - given by the
process id found in the lock file is no longer running, - uu_lock() will
write its own process id into the file and return success. - uu_lock_txfr() transfers lock ownership to another process.
 - uu_lock()
must have previously been successful. - uu_unlock() removes the lockfile created by uu_lock() for
 - the given
ttyname. Care should be taken that uu_lock() was successful - before calling uu_unlock().
 - uu_lockerr() returns an error string representing the error uu_lockresult, as returned from uu_lock().
 
RETURN VALUES
uu_unlock() returns 0 on success and -1 on failure.
uu_lock() may return any of the following values:
UU_LOCK_INUSE: The lock is in use by another process.
UU_LOCK_OK: The lock was successfully created.
- UU_LOCK_OPEN_ERR:  The  lock  file  could  not be opened via
 - open(2).
 - UU_LOCK_READ_ERR: The lock file could not be read via
 - read(2).
 - UU_LOCK_CREAT_ERR: Cannot create temporary lock file via
 - creat(2).
 - UU_LOCK_WRITE_ERR: The current process id could not be writ
 - ten to the
lock file via a call to write(2). - UU_LOCK_LINK_ERR: Cannot link temporary lock file via
 - link(2).
 - UU_LOCK_TRY_ERR: Locking attempts are failed after 5 tries.
 - If a value of UU_LOCK_OK is passed to uu_lockerr(), an empty
 - string is
returned. Otherwise, a string specifying the reason for - failure is
returned. uu_lockerr() uses the current value of errno to - determine the
exact error. Care should be made not to allow errno to be - changed
between calls to uu_lock() and uu_lockerr(). - uu_lock_txfr() may return any of the following values:
 - UU_LOCK_OK: The transfer was successful. The specified pro
 - cess now holds
the device lock. - UU_LOCK_OWNER_ERR: The current process does not already own
 - a lock on the
specified device. - UU_LOCK_WRITE_ERR: The new process id could not be written
 - to the lock
file via a call to write(2). 
ERRORS
- If uu_lock() returns one of the error values above, the
 - global value
errno can be used to determine the cause. Refer to the re - spective manual
pages for further details. - uu_unlock() will set the global variable errno to reflect
 - the reason that
the lock file could not be removed. Refer to the descrip - tion of
unlink(2) for further details. 
SEE ALSO
lseek(2), open(2), read(2), write(2)
BUGS
- It is possible that a stale lock is not recognised  as  such
 - if a new processes is assigned the same processes id as the program that
 - left the
stale lock. - The calling process must have write permissions to the
 - /var/spool/lock
directory. There is no mechanism in place to ensure that - the permissions
of this directory are the same as those of the serial de - vices that might
be locked. - BSD March 30, 1997