xref: /freebsd/lib/libutil/uucplock.3 (revision 7f3dea244c40159a41ab22da77a434d7c5b5e85a)
1568b59b9SBrian Somers.\"
2568b59b9SBrian Somers.\" Copyright (c) 1996 Brian Somers <brian@awfulhak.demon.co.uk>
3568b59b9SBrian Somers.\"
4568b59b9SBrian Somers.\" All rights reserved.
5568b59b9SBrian Somers.\"
6568b59b9SBrian Somers.\" Redistribution and use in source and binary forms, with or without
7568b59b9SBrian Somers.\" modification, are permitted provided that the following conditions
8568b59b9SBrian Somers.\" are met:
9568b59b9SBrian Somers.\" 1. Redistributions of source code must retain the above copyright
10568b59b9SBrian Somers.\"    notice, this list of conditions and the following disclaimer.
11568b59b9SBrian Somers.\" 2. Redistributions in binary form must reproduce the above copyright
12568b59b9SBrian Somers.\"    notice, this list of conditions and the following disclaimer in the
13568b59b9SBrian Somers.\"    documentation and/or other materials provided with the distribution.
14568b59b9SBrian Somers.\"
15568b59b9SBrian Somers.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
16568b59b9SBrian Somers.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17568b59b9SBrian Somers.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18568b59b9SBrian Somers.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
19568b59b9SBrian Somers.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20568b59b9SBrian Somers.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21568b59b9SBrian Somers.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22568b59b9SBrian Somers.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23568b59b9SBrian Somers.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24568b59b9SBrian Somers.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25568b59b9SBrian Somers.\"
267f3dea24SPeter Wemm.\" $FreeBSD$
27568b59b9SBrian Somers.\" "
28568b59b9SBrian Somers.Dd March 30, 1997
29568b59b9SBrian Somers.Os
3074804d58SMike Pritchard.Dt UUCPLOCK 3
31568b59b9SBrian Somers.Sh NAME
32568b59b9SBrian Somers.Nm uu_lock ,
33b5ebf1f5SMike Pritchard.Nm uu_unlock ,
34b5ebf1f5SMike Pritchard.Nm uu_lockerr
35568b59b9SBrian Somers.Nd acquire and release control of a serial device
36568b59b9SBrian Somers.Sh SYNOPSIS
37210793f7SDavid Nugent.Fd #include <sys/types.h>
38568b59b9SBrian Somers.Fd #include <libutil.h>
39568b59b9SBrian Somers.Ft int
4085b0d75dSBrian Somers.Fn uu_lock "const char *ttyname"
41568b59b9SBrian Somers.Ft int
4246cf264aSBrian Somers.Fn uu_lock_txfr "const char *ttyname" "pid_t pid"
4346cf264aSBrian Somers.Ft int
4485b0d75dSBrian Somers.Fn uu_unlock "const char *ttyname"
4585b0d75dSBrian Somers.Ft const char *
46687d0cdeSBrian Somers.Fn uu_lockerr "int uu_lockresult"
47568b59b9SBrian Somers.Pp
48568b59b9SBrian SomersLink with
49568b59b9SBrian Somers.Va -lutil
50568b59b9SBrian Somerson the
51568b59b9SBrian Somers.Xr cc 1
52568b59b9SBrian Somerscommand line.
53568b59b9SBrian Somers.Sh DESCRIPTION
54568b59b9SBrian SomersThe
55568b59b9SBrian Somers.Fn uu_lock
56568b59b9SBrian Somersfunction attempts to create a lock file called
57b5ebf1f5SMike Pritchard.Pa /var/spool/lock/LCK..
58568b59b9SBrian Somerswith a suffix given by the passed
59568b59b9SBrian Somers.Fa ttyname .
60568b59b9SBrian SomersIf the file already exists, it is expected to contain the process
61568b59b9SBrian Somersid of the locking program.
62568b59b9SBrian Somers.Pp
63568b59b9SBrian SomersIf the file does not already exist, or the owning process given by
64568b59b9SBrian Somersthe process id found in the lock file is no longer running,
65568b59b9SBrian Somers.Fn uu_lock
66568b59b9SBrian Somerswill write its own process id into the file and return success.
67568b59b9SBrian Somers.Pp
6846cf264aSBrian Somers.Fn uu_lock_txfr
6946cf264aSBrian Somerstransfers lock ownership to another process.
7046cf264aSBrian Somers.Fn uu_lock
7146cf264aSBrian Somersmust have previously been successful.
7246cf264aSBrian Somers.Pp
73568b59b9SBrian Somers.Fn uu_unlock
74568b59b9SBrian Somersremoves the lockfile created by
75568b59b9SBrian Somers.Fn uu_lock
76568b59b9SBrian Somersfor the given
77568b59b9SBrian Somers.Fa ttyname .
78568b59b9SBrian SomersCare should be taken that
79568b59b9SBrian Somers.Fn uu_lock
80568b59b9SBrian Somerswas successful before calling
81568b59b9SBrian Somers.Fn uu_unlock .
82687d0cdeSBrian Somers.Pp
83687d0cdeSBrian Somers.Fn uu_lockerr
84687d0cdeSBrian Somersreturns an error string representing the error
85687d0cdeSBrian Somers.Fa uu_lockresult ,
86687d0cdeSBrian Somersas returned from
87687d0cdeSBrian Somers.Fn uu_lock .
88568b59b9SBrian Somers.Sh RETURN VALUES
89687d0cdeSBrian Somers.Fn uu_unlock
90687d0cdeSBrian Somersreturns 0 on success and -1 on failure.
91687d0cdeSBrian Somers.Pp
92687d0cdeSBrian Somers.Fn uu_lock
93687d0cdeSBrian Somersmay return any of the following values:
94687d0cdeSBrian Somers.Pp
95687d0cdeSBrian Somers.Dv UU_LOCK_INUSE:
96687d0cdeSBrian SomersThe lock is in use by another process.
97687d0cdeSBrian Somers.Pp
98687d0cdeSBrian Somers.Dv UU_LOCK_OK:
99687d0cdeSBrian SomersThe lock was successfully created.
100687d0cdeSBrian Somers.Pp
101687d0cdeSBrian Somers.Dv UU_LOCK_OPEN_ERR:
102687d0cdeSBrian SomersThe lock file could not be opened via
103687d0cdeSBrian Somers.Xr open 2 .
104687d0cdeSBrian Somers.Pp
105687d0cdeSBrian Somers.Dv UU_LOCK_READ_ERR:
106687d0cdeSBrian SomersThe lock file could not be read via
107687d0cdeSBrian Somers.Xr read 2 .
108687d0cdeSBrian Somers.Pp
10984dc2299SAndrey A. Chernov.Dv UU_LOCK_CREAT_ERR:
11084dc2299SAndrey A. ChernovCan't create temporary lock file via
11184dc2299SAndrey A. Chernov.Xr creat 2 .
112687d0cdeSBrian Somers.Pp
113687d0cdeSBrian Somers.Dv UU_LOCK_WRITE_ERR:
114687d0cdeSBrian SomersThe current process id could not be written to the lock file via a call to
115687d0cdeSBrian Somers.Xr write 2 .
116687d0cdeSBrian Somers.Pp
11784dc2299SAndrey A. Chernov.Dv UU_LOCK_LINK_ERR:
11884dc2299SAndrey A. ChernovCan't link temporary lock file via
11984dc2299SAndrey A. Chernov.Xr link 2 .
12084dc2299SAndrey A. Chernov.Pp
12184dc2299SAndrey A. Chernov.Dv UU_LOCK_TRY_ERR:
12284dc2299SAndrey A. ChernovLocking attempts are failed after 5 tries.
12384dc2299SAndrey A. Chernov.Pp
124687d0cdeSBrian SomersIf a value of
125687d0cdeSBrian Somers.Dv UU_LOCK_OK
126687d0cdeSBrian Somersis passed to
127687d0cdeSBrian Somers.Fn uu_lockerr ,
128134970f6SMike Pritchardan empty string is returned.
12928754192SAndrey A. ChernovOtherwise, a string specifying
130687d0cdeSBrian Somersthe reason for failure is returned.
131687d0cdeSBrian Somers.Fn uu_lockerr
132687d0cdeSBrian Somersuses the current value of
133b5ebf1f5SMike Pritchard.Va errno
134687d0cdeSBrian Somersto determine the exact error.  Care should be made not to allow
135b5ebf1f5SMike Pritchard.Va errno
136687d0cdeSBrian Somersto be changed between calls to
137568b59b9SBrian Somers.Fn uu_lock
138568b59b9SBrian Somersand
139687d0cdeSBrian Somers.Fn uu_lockerr .
14046cf264aSBrian Somers.Pp
14146cf264aSBrian Somers.Fn uu_lock_txfr
14246cf264aSBrian Somersmay return any of the following values:
14346cf264aSBrian Somers.Pp
14446cf264aSBrian Somers.Dv UU_LOCK_OK:
14546cf264aSBrian SomersThe transfer was successful.  The specified process now holds the device
14646cf264aSBrian Somerslock.
14746cf264aSBrian Somers.Pp
14846cf264aSBrian Somers.Dv UU_LOCK_OWNER_ERR:
14946cf264aSBrian SomersThe current process does not already own a lock on the specified device.
15046cf264aSBrian Somers.Pp
15146cf264aSBrian Somers.Dv UU_LOCK_WRITE_ERR:
15246cf264aSBrian SomersThe new process id could not be written to the lock file via a call to
15346cf264aSBrian Somers.Xr write 2 .
154568b59b9SBrian Somers.Sh ERRORS
155687d0cdeSBrian SomersIf
156568b59b9SBrian Somers.Fn uu_lock
15746cf264aSBrian Somersreturns one of the error values above, the global value
158b5ebf1f5SMike Pritchard.Va errno
159687d0cdeSBrian Somerscan be used to determine the cause.  Refer to the respective manual pages
160687d0cdeSBrian Somersfor further details.
161568b59b9SBrian Somers.Pp
162568b59b9SBrian Somers.Fn uu_unlock
163568b59b9SBrian Somerswill set the global variable
164b5ebf1f5SMike Pritchard.Va errno
165568b59b9SBrian Somersto reflect the reason that the lock file could not be removed.
166568b59b9SBrian SomersRefer to the description of
167568b59b9SBrian Somers.Xr unlink 2
168568b59b9SBrian Somersfor further details.
169687d0cdeSBrian Somers.Sh SEE ALSO
170bf5cbf35SWolfram Schneider.Xr lseek 2 ,
171687d0cdeSBrian Somers.Xr open 2 ,
172687d0cdeSBrian Somers.Xr read 2 ,
173687d0cdeSBrian Somers.Xr write 2
174568b59b9SBrian Somers.Sh BUGS
175568b59b9SBrian SomersIt is possible that a stale lock is not recognised as such if a new
176568b59b9SBrian Somersprocesses is assigned the same processes id as the program that left
177568b59b9SBrian Somersthe stale lock.
178568b59b9SBrian Somers.Pp
179568b59b9SBrian SomersThe calling process must have write permissions to the
180b5ebf1f5SMike Pritchard.Pa /var/spool/lock
181568b59b9SBrian Somersdirectory.  There is no mechanism in place to ensure that the
182568b59b9SBrian Somerspermissions of this directory are the same as those of the
183568b59b9SBrian Somersserial devices that might be locked.
184