]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/string/strerror.3
strerror.3: Fix whitespace issue introduced in r368714
[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 17, 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 EXAMPLES
174 The following example shows how to use
175 .Fn perror
176 to report an error.
177 .Bd -literal -offset 2n
178 #include <fcntl.h>
179 #include <stdio.h>
180 #include <stdlib.h>
181
182 int
183 main(void)
184 {
185         int fd;
186
187         if ((fd = open("/nonexistent", O_RDONLY)) == -1) {
188                 perror("open()");
189                 exit(1);
190         }
191         printf("File descriptor: %d\en", fd);
192         return (0);
193 }
194 .Ed
195 .Pp
196 When executed, the program will print an error message along the lines of
197 .Ql "open(): No such file or directory" .
198 .Sh SEE ALSO
199 .Xr intro 2 ,
200 .Xr err 3 ,
201 .Xr psignal 3
202 .Sh STANDARDS
203 The
204 .Fn perror
205 and
206 .Fn strerror
207 functions conform to
208 .St -isoC-99 .
209 The
210 .Fn strerror_r
211 function conforms to
212 .St -p1003.1-2001 .
213 The
214 .Fn strerror_l
215 function conforms to
216 .St -p1003.1-2008 .
217 .Sh HISTORY
218 The
219 .Fn strerror
220 and
221 .Fn perror
222 functions first appeared in
223 .Bx 4.4 .
224 The
225 .Fn strerror_r
226 function was implemented in
227 .Fx 4.4
228 by
229 .An Wes Peters Aq Mt wes@FreeBSD.org .
230 The
231 .Fn strerror_l
232 function was added in
233 .Fx 13.0 .
234 .Sh BUGS
235 The
236 .Fn strerror
237 function returns its result in a static buffer which
238 will be overwritten by subsequent calls.
239 .Pp
240 Programs that use the deprecated
241 .Va sys_errlist
242 variable often fail to compile because they declare it
243 inconsistently.
244 Size of the
245 .Va sys_errlist
246 object might increase during FreeBSD lifetime,
247 breaking some ABI stability guarantees.