| PIDLOCK(3) | Library Functions Manual | PIDLOCK(3) | 
pidlock, ttylock,
  ttyunlock —
#include <util.h>
int
  
  pidlock(const
    char *lockfile, int
    flags, pid_t
    *locker, const char
    *info);
int
  
  ttylock(const
    char *tty, int
    flags, pid_t
    *locker);
int
  
  ttyunlock(const
    char *tty);
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 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:
PIDLOCK_NONBLOCKPIDLOCK_USEHOSTNAMEPIDLOCK_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.
pidlock() or ttylock() can set
  errno to the following values on failure:
EFTYPE]ttylock() is not a character special device.EWOULDBLOCK]PIDLOCK_NONBLOCK flag was specified.pidlock() and ttylock()
  functions appeared in NetBSD 1.3.
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.
| March 19, 2006 | NetBSD 10.0 |