]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/string/strerror.3
Implement strerror_l().
[FreeBSD/FreeBSD.git] / lib / libc / string / strerror.3
1 .\" Copyright (c) 1980, 1991, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" This code is derived from software contributed to Berkeley by
5 .\" the American National Standards Committee X3, on Information
6 .\" Processing Systems.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\" 3. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"     @(#)strerror.3  8.1 (Berkeley) 6/9/93
33 .\" $FreeBSD$
34 .\"
35 .Dd December 7, 2020
36 .Dt STRERROR 3
37 .Os
38 .Sh NAME
39 .Nm perror ,
40 .Nm strerror ,
41 .Nm strerror_l ,
42 .Nm strerror_r ,
43 .Nm sys_errlist ,
44 .Nm sys_nerr
45 .Nd system error messages
46 .Sh LIBRARY
47 .Lb libc
48 .Sh SYNOPSIS
49 .In stdio.h
50 .Ft void
51 .Fn perror "const char *string"
52 .Vt extern const char * const sys_errlist[] ;
53 .Vt extern const int sys_nerr ;
54 .In string.h
55 .Ft "char *"
56 .Fn strerror "int errnum"
57 .Ft "char *"
58 .Fn strerror_l "int errnum" "locale_t"
59 .Ft int
60 .Fn strerror_r "int errnum" "char *strerrbuf" "size_t buflen"
61 .Sh DESCRIPTION
62 The
63 .Fn strerror ,
64 .Fn strerror_l ,
65 .Fn strerror_r ,
66 and
67 .Fn perror
68 functions look up the error message string corresponding to an
69 error number.
70 .Pp
71 The
72 .Fn strerror
73 function accepts an error number argument
74 .Fa errnum
75 and returns a pointer to the corresponding message string
76 in the current locale.
77 .Fn strerror
78 is not thread-safe.
79 It returns a pointer to an internal static buffer that could be
80 overwritten by a
81 .Fn strerror
82 call from another thread.
83 .Pp
84 The
85 .Fn strerror_l
86 function accepts
87 .Fa errnum
88 error number and
89 .Fa locale
90 locale handle arguments and returns a pointer to a string
91 corresponding to the specified error in the given locale.
92 .Fn strerror_l
93 is thread-safe, its result can be only overwritten by
94 another call to
95 .Fn strerror_l
96 from the current thread.
97 .Pp
98 The
99 .Fn strerror_r
100 function renders the same result into
101 .Fa strerrbuf
102 for a maximum of
103 .Fa buflen
104 characters and returns 0 upon success.
105 .Pp
106 The
107 .Fn perror
108 function finds the error message corresponding to the current
109 value of the global variable
110 .Va errno
111 .Pq Xr intro 2
112 and writes it, followed by a newline, to the
113 standard error file descriptor.
114 If the argument
115 .Fa string
116 is
117 .Pf non- Dv NULL
118 and does not point to the null character,
119 this string is prepended to the message
120 string and separated from it by
121 a colon and space
122 .Pq Dq Li ":\ " ;
123 otherwise, only the error message string is printed.
124 .Pp
125 If the error number is not recognized, these functions return an error message
126 string containing
127 .Dq Li "Unknown error:\ "
128 followed by the error number in decimal.
129 The
130 .Fn strerror
131 and
132 .Fn strerror_r
133 functions return
134 .Er EINVAL
135 as a warning.
136 Error numbers recognized by this implementation fall in
137 the range 0 <
138 .Fa errnum
139 <
140 .Fa sys_nerr .
141 The number 0 is also recognized, although applications that take advantage of
142 this are likely to use unspecified values of
143 .Va errno .
144 .Pp
145 If insufficient storage is provided in
146 .Fa strerrbuf
147 (as specified in
148 .Fa buflen )
149 to contain the error string,
150 .Fn strerror_r
151 returns
152 .Er ERANGE
153 and
154 .Fa strerrbuf
155 will contain an error message that has been truncated and
156 .Dv NUL
157 terminated to fit the length specified by
158 .Fa buflen .
159 .Pp
160 The message strings can be accessed directly using the external
161 array
162 .Va sys_errlist .
163 The external value
164 .Va sys_nerr
165 contains a count of the messages in
166 .Va sys_errlist .
167 The use of these variables is deprecated;
168 .Fn strerror ,
169 .Fn strerror_l ,
170 or
171 .Fn strerror_r
172 should be used instead.
173 .Sh SEE ALSO
174 .Xr intro 2 ,
175 .Xr err 3 ,
176 .Xr psignal 3
177 .Sh STANDARDS
178 The
179 .Fn perror
180 and
181 .Fn strerror
182 functions conform to
183 .St -isoC-99 .
184 The
185 .Fn strerror_r
186 function conforms to
187 .St -p1003.1-2001 .
188 The
189 .Fn strerror_l
190 function conforms to
191 .St -p1003.1-2008 .
192 .Sh HISTORY
193 The
194 .Fn strerror
195 and
196 .Fn perror
197 functions first appeared in
198 .Bx 4.4 .
199 The
200 .Fn strerror_r
201 function was implemented in
202 .Fx 4.4
203 by
204 .An Wes Peters Aq Mt wes@FreeBSD.org .
205 The
206 .Fn strerror_l
207 function was added in
208 .Fx 13.0 .
209 .Sh BUGS
210 The
211 .Fn strerror
212 function returns its result in a static buffer which
213 will be overwritten by subsequent calls.
214 .Pp
215 Programs that use the deprecated
216 .Va sys_errlist
217 variable often fail to compile because they declare it
218 inconsistently.
219 Size of the
220 .Va sys_errlist
221 object might increase during FreeBSD lifetime,
222 breaking some ABI stability guarantees.