*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->NetBSD man pages -> ttylock (3)              



NAME    [Toc]    [Back]

     pidlock, ttylock, ttyunlock - locks based on files containing PIDs

LIBRARY    [Toc]    [Back]

     System Utilities Library (libutil, -lutil)

SYNOPSIS    [Toc]    [Back]

     #include <util.h>

     pidlock(const char *lockfile, int flags, pid_t *locker,
             const char *info);

     ttylock(const char *tty, int flags, pid_t *locker);

     ttyunlock(const char *tty);

DESCRIPTION    [Toc]    [Back]

     The pidlock() ttylock(), and ttyunlock() functions attempt to create a
     lockfile for an arbitrary resource that only one program may hold at a
     time.  (In the case of ttylock(), this is access to a tty device.) If the
     function succeeds in creating the lockfile, it will succeed for no other
     program calling it with the same lockfile until the original calling program
 has removed the lockfile or exited.  The ttyunlock() function will
     remove the lockfile created by ttylock().

     These functions use the method of creating a lockfile traditionally used
     by UUCP software.  This is described as follows in the documentation for
     Taylor UUCP:

           The lock file normally contains the process ID of the locking  process.
   This  makes  it  easy  to determine whether a lock is still
           valid.  The algorithm is to create a temporary file and  then  link
           it  to  the  name that must be locked.  If the link fails because a
           file with that name already exists, the existing file  is  read  to
           get  the process ID.  If the process still exists, the lock attempt
           fails.  Otherwise the lock file is deleted and  the  locking  algorithm
 is retried.

     The PID is stored in ASCII format, with leading spaces to pad it out to
     ten characters, and a terminating newline.  This implementation has been
     extended to put the hostname on the second line of the file, terminated
     with a newline, and optionally an arbitrary comment on the third line of
     the file, also terminated with a newline. If a comment is given, but
     PIDLOCK_NONBLOCK is not, a blank line will be written as the second line
     of the file.

     The pidlock() function will attempt to create the file lockfile and put
     the current process's pid in it. The ttylock() function will do the same,
     but should be passed only the base name (with no leading directory prefix)
 of the tty to be locked; it will test that the tty exists in /dev
     and is a character device, and then create the file in the
     /var/spool/lock directory and prefix the filename with LCK...  Use the
     ttyunlock() function to remove this lock.

     The following flags may be passed in flags:

                         The function should return immediately when a lock is
                         held by another active process.  Otherwise the function
 will wait (forever, if necessary) for the lock
                         to be freed.

                         The hostname should be compared against the hostname
                         in the second line of the file (if present), and if
                         they differ, no attempt at checking for a living process
 holding the lock will be made, and the lockfile
                         will never be deleted.  (The process is assumed to be
                         alive.)  This is used for locking on NFS or other
                         remote filesystems.  (The function will never create
                         a lock if PIDLOCK_USEHOSTNAME is specified and no
                         hostname is present.)

     If locker is non-null, it will contain the PID of the locking process, if
     there is one, on return.

     If info is non-null and the lock succeeds, the string it points to will
     be written as the third line of the lock file.

RETURN VALUES    [Toc]    [Back]

     Zero is returned if the operation was successful; on an error a -1 is
     returned and a standard error code is left in the global location errno.

ERRORS    [Toc]    [Back]

     These are among the values left in errno if pidlock() or ttylock()
     returns a failure:

     [EPERM]            The current process does not have some of the privileges
 necessary to perform the lock. These include
                        read and write access to the lock directory, and read
                        access to the current lockfile, if it exists.

     [ENOENT]           A component of a specified pathname did not exist, or
                        the pathname was an empty string.

     [EWOULBLOCK]       Another runnning process has a lock and the
                        PIDLOCK_NONBLOCK flag was specified.

     [ENAMETOOLONG]     A component of the path name exceeded 255 (MAXNAMELEN)
                        characters, or an entire path name exceeded 1023 (MAXPATHLEN-1)

HISTORY    [Toc]    [Back]

     The pidlock() and ttylock() functions appeared in NetBSD 1.3.

AUTHORS    [Toc]    [Back]

     Curt Sampson <cjs@netbsd.org>

BUGS    [Toc]    [Back]

     The lockfile format breaks if a pid is longer than ten digits when
     printed in decimal form.

     The PID returned will be the pid of the locker on the remote machine if
     PIDLOCK_USEHOSTNAME is specified, but there is no indication that this is
     not on the local machine.

BSD                            November 10, 1996                           BSD
[ Back ]
 Similar pages
Name OS Title
fuser Tru64 Reports PIDs and UIDs for files, file systems and/or the devices attached to them.
csplit FreeBSD split files based on context
cpusetGetPIDList IRIX get a list of all PIDs attached to a cpuset
passwd_import HP-UX Creates registry database entries based on information in UNIX group and password files
BUF_LOCK FreeBSD locks a buffer
BUF_TIMELOCK FreeBSD locks a buffer
dxpause Tru64 locks (pauses) an X display
pthread_mutex_lock IRIX mutual exclusion locks
BUF_LOCK Tru64 General: Locks the specified I/O buffer
tis_mutex_lock Tru64 Locks an unlocked mutex
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service