xref: /freebsd/lib/libutil/uucplock.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
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.\" "
26*bc89b58dSGordon Bergling.Dd May 10, 2020
2774804d58SMike Pritchard.Dt UUCPLOCK 3
28aa12cea2SUlrich Spörlein.Os
29568b59b9SBrian Somers.Sh NAME
30568b59b9SBrian Somers.Nm uu_lock ,
31b5ebf1f5SMike Pritchard.Nm uu_unlock ,
32b5ebf1f5SMike Pritchard.Nm uu_lockerr
33568b59b9SBrian Somers.Nd acquire and release control of a serial device
343dc329d1SAlexey Zelkin.Sh LIBRARY
353dc329d1SAlexey Zelkin.Lb libutil
36568b59b9SBrian Somers.Sh SYNOPSIS
3732eef9aeSRuslan Ermilov.In sys/types.h
3832eef9aeSRuslan Ermilov.In 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.Sh DESCRIPTION
48568b59b9SBrian SomersThe
49568b59b9SBrian Somers.Fn uu_lock
50568b59b9SBrian Somersfunction attempts to create a lock file called
51b5ebf1f5SMike Pritchard.Pa /var/spool/lock/LCK..
52568b59b9SBrian Somerswith a suffix given by the passed
53568b59b9SBrian Somers.Fa ttyname .
54568b59b9SBrian SomersIf the file already exists, it is expected to contain the process
55568b59b9SBrian Somersid of the locking program.
56568b59b9SBrian Somers.Pp
57568b59b9SBrian SomersIf the file does not already exist, or the owning process given by
58568b59b9SBrian Somersthe process id found in the lock file is no longer running,
59568b59b9SBrian Somers.Fn uu_lock
60568b59b9SBrian Somerswill write its own process id into the file and return success.
61568b59b9SBrian Somers.Pp
6246cf264aSBrian Somers.Fn uu_lock_txfr
6346cf264aSBrian Somerstransfers lock ownership to another process.
6446cf264aSBrian Somers.Fn uu_lock
6546cf264aSBrian Somersmust have previously been successful.
6646cf264aSBrian Somers.Pp
67568b59b9SBrian Somers.Fn uu_unlock
68568b59b9SBrian Somersremoves the lockfile created by
69568b59b9SBrian Somers.Fn uu_lock
70568b59b9SBrian Somersfor the given
71568b59b9SBrian Somers.Fa ttyname .
72568b59b9SBrian SomersCare should be taken that
73568b59b9SBrian Somers.Fn uu_lock
74568b59b9SBrian Somerswas successful before calling
75568b59b9SBrian Somers.Fn uu_unlock .
76687d0cdeSBrian Somers.Pp
77687d0cdeSBrian Somers.Fn uu_lockerr
78687d0cdeSBrian Somersreturns an error string representing the error
79687d0cdeSBrian Somers.Fa uu_lockresult ,
80687d0cdeSBrian Somersas returned from
81687d0cdeSBrian Somers.Fn uu_lock .
82568b59b9SBrian Somers.Sh RETURN VALUES
83687d0cdeSBrian Somers.Fn uu_unlock
84687d0cdeSBrian Somersreturns 0 on success and -1 on failure.
85687d0cdeSBrian Somers.Pp
86687d0cdeSBrian Somers.Fn uu_lock
87687d0cdeSBrian Somersmay return any of the following values:
88687d0cdeSBrian Somers.Pp
89687d0cdeSBrian Somers.Dv UU_LOCK_INUSE :
90687d0cdeSBrian SomersThe lock is in use by another process.
91687d0cdeSBrian Somers.Pp
92687d0cdeSBrian Somers.Dv UU_LOCK_OK :
93687d0cdeSBrian SomersThe lock was successfully created.
94687d0cdeSBrian Somers.Pp
95687d0cdeSBrian Somers.Dv UU_LOCK_OPEN_ERR :
96687d0cdeSBrian SomersThe lock file could not be opened via
97687d0cdeSBrian Somers.Xr open 2 .
98687d0cdeSBrian Somers.Pp
99687d0cdeSBrian Somers.Dv UU_LOCK_READ_ERR :
100687d0cdeSBrian SomersThe lock file could not be read via
101687d0cdeSBrian Somers.Xr read 2 .
102687d0cdeSBrian Somers.Pp
10384dc2299SAndrey A. Chernov.Dv UU_LOCK_CREAT_ERR :
1040227791bSRuslan ErmilovCannot create temporary lock file via
10584dc2299SAndrey A. Chernov.Xr creat 2 .
106687d0cdeSBrian Somers.Pp
107687d0cdeSBrian Somers.Dv UU_LOCK_WRITE_ERR :
108687d0cdeSBrian SomersThe current process id could not be written to the lock file via a call to
109687d0cdeSBrian Somers.Xr write 2 .
110687d0cdeSBrian Somers.Pp
11184dc2299SAndrey A. Chernov.Dv UU_LOCK_LINK_ERR :
1120227791bSRuslan ErmilovCannot link temporary lock file via
11384dc2299SAndrey A. Chernov.Xr link 2 .
11484dc2299SAndrey A. Chernov.Pp
11584dc2299SAndrey A. Chernov.Dv UU_LOCK_TRY_ERR :
11684dc2299SAndrey A. ChernovLocking attempts are failed after 5 tries.
11784dc2299SAndrey A. Chernov.Pp
118687d0cdeSBrian SomersIf a value of
119687d0cdeSBrian Somers.Dv UU_LOCK_OK
120687d0cdeSBrian Somersis passed to
121687d0cdeSBrian Somers.Fn uu_lockerr ,
122134970f6SMike Pritchardan empty string is returned.
12328754192SAndrey A. ChernovOtherwise, a string specifying
124687d0cdeSBrian Somersthe reason for failure is returned.
125687d0cdeSBrian Somers.Fn uu_lockerr
126687d0cdeSBrian Somersuses the current value of
127b5ebf1f5SMike Pritchard.Va errno
1281a0a9345SRuslan Ermilovto determine the exact error.
1291a0a9345SRuslan ErmilovCare should be made not to allow
130b5ebf1f5SMike Pritchard.Va errno
131687d0cdeSBrian Somersto be changed between calls to
132568b59b9SBrian Somers.Fn uu_lock
133568b59b9SBrian Somersand
134687d0cdeSBrian Somers.Fn uu_lockerr .
13546cf264aSBrian Somers.Pp
13646cf264aSBrian Somers.Fn uu_lock_txfr
13746cf264aSBrian Somersmay return any of the following values:
13846cf264aSBrian Somers.Pp
13946cf264aSBrian Somers.Dv UU_LOCK_OK :
1401a0a9345SRuslan ErmilovThe transfer was successful.
1411a0a9345SRuslan ErmilovThe specified process now holds the device
14246cf264aSBrian Somerslock.
14346cf264aSBrian Somers.Pp
14446cf264aSBrian Somers.Dv UU_LOCK_OWNER_ERR :
14546cf264aSBrian SomersThe current process does not already own a lock on the specified device.
14646cf264aSBrian Somers.Pp
14746cf264aSBrian Somers.Dv UU_LOCK_WRITE_ERR :
14846cf264aSBrian SomersThe new process id could not be written to the lock file via a call to
14946cf264aSBrian Somers.Xr write 2 .
150568b59b9SBrian Somers.Sh ERRORS
151687d0cdeSBrian SomersIf
152568b59b9SBrian Somers.Fn uu_lock
15346cf264aSBrian Somersreturns one of the error values above, the global value
154b5ebf1f5SMike Pritchard.Va errno
1551a0a9345SRuslan Ermilovcan be used to determine the cause.
1561a0a9345SRuslan ErmilovRefer to the respective manual pages
157687d0cdeSBrian Somersfor further details.
158568b59b9SBrian Somers.Pp
159568b59b9SBrian Somers.Fn uu_unlock
160568b59b9SBrian Somerswill set the global variable
161b5ebf1f5SMike Pritchard.Va errno
162568b59b9SBrian Somersto reflect the reason that the lock file could not be removed.
163568b59b9SBrian SomersRefer to the description of
164568b59b9SBrian Somers.Xr unlink 2
165568b59b9SBrian Somersfor further details.
166687d0cdeSBrian Somers.Sh SEE ALSO
167bf5cbf35SWolfram Schneider.Xr lseek 2 ,
168687d0cdeSBrian Somers.Xr open 2 ,
169687d0cdeSBrian Somers.Xr read 2 ,
170687d0cdeSBrian Somers.Xr write 2
171*bc89b58dSGordon Bergling.Sh HISTORY
172*bc89b58dSGordon BerglingThe functions
173*bc89b58dSGordon Bergling.Fn uu_lock ,
174*bc89b58dSGordon Bergling.Fn uu_unlock
175*bc89b58dSGordon Berglingand
176*bc89b58dSGordon Bergling.Fn uu_lockerr
177*bc89b58dSGordon Berglingfirst appeared in
178*bc89b58dSGordon Bergling.Fx 2.0.5 .
179568b59b9SBrian Somers.Sh BUGS
180568b59b9SBrian SomersIt is possible that a stale lock is not recognised as such if a new
181568b59b9SBrian Somersprocesses is assigned the same processes id as the program that left
182568b59b9SBrian Somersthe stale lock.
183568b59b9SBrian Somers.Pp
184568b59b9SBrian SomersThe calling process must have write permissions to the
185b5ebf1f5SMike Pritchard.Pa /var/spool/lock
1861a0a9345SRuslan Ermilovdirectory.
1871a0a9345SRuslan ErmilovThere is no mechanism in place to ensure that the
188568b59b9SBrian Somerspermissions of this directory are the same as those of the
189568b59b9SBrian Somersserial devices that might be locked.
190