strerror(3) Library Functions Manual strerror(3)
NAME
strerror, strerrorname_np, strerrordesc_np, strerror_r, strerror_l - re-
turn string describing error number
LIBRARY
Standard C library (libc, -lc)
SYNOPSIS
#include <string.h>
char *strerror(int errnum);
const char *strerrorname_np(int errnum);
const char *strerrordesc_np(int errnum);
int strerror_r(int errnum, char buf[.buflen], size_t buflen);
/* XSI-compliant */
char *strerror_r(int errnum, char buf[.buflen], size_t buflen);
/* GNU-specific */
char *strerror_l(int errnum, locale_t locale);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strerrorname_np(), strerrordesc_np():
_GNU_SOURCE
strerror_r():
The XSI-compliant version is provided if:
(_POSIX_C_SOURCE >= 200112L) && ! _GNU_SOURCE
Otherwise, the GNU-specific version is provided.
DESCRIPTION
The strerror() function returns a pointer to a string that describes the
error code passed in the argument errnum, possibly using the LC_MESSAGES
part of the current locale to select the appropriate language. (For ex-
ample, if errnum is EINVAL, the returned description will be "Invalid
argument".) This string must not be modified by the application, and
the returned pointer will be invalidated on a subsequent call to str-
error() or strerror_l(), or if the thread that obtained the string ex-
its. No other library function, including perror(3), will modify this
string.
Like strerror(), the strerrordesc_np() function returns a pointer to a
string that describes the error code passed in the argument errnum, with
the difference that the returned string is not translated according to
the current locale.
The strerrorname_np() function returns a pointer to a string containing
the name of the error code passed in the argument errnum. For example,
given EPERM as an argument, this function returns a pointer to the
string "EPERM". Given 0 as an argument, this function returns a pointer
to the string "0".
strerror_r()
strerror_r() is like strerror(), but might use the supplied buffer buf
instead of allocating one internally. This function is available in two
versions: an XSI-compliant version specified in POSIX.1-2001 (available
since glibc 2.3.4, but not POSIX-compliant until glibc 2.13), and a GNU-
specific version (available since glibc 2.0). The XSI-compliant version
is provided with the feature test macros settings shown in the SYNOPSIS;
otherwise the GNU-specific version is provided. If no feature test
macros are explicitly defined, then (since glibc 2.4) _POSIX_C_SOURCE is
defined by default with the value 200112L, so that the XSI-compliant
version of strerror_r() is provided by default.
The XSI-compliant strerror_r() is preferred for portable applications.
It returns the error string in the user-supplied buffer buf of length
buflen.
The GNU-specific strerror_r() returns a pointer to a string containing
the error message. This may be either a pointer to a string that the
function stores in buf, or a pointer to some (immutable) static string
(in which case buf is unused). If the function stores a string in buf,
then at most buflen bytes are stored (the string may be truncated if bu-
flen is too small and errnum is unknown). The string always includes a
terminating null byte ('\0').
strerror_l()
strerror_l() is like strerror(), but maps errnum to a locale-dependent
error message in the locale specified by locale. The behavior of str-
error_l() is undefined if locale is the special locale object
LC_GLOBAL_LOCALE or is not a valid locale object handle.
RETURN VALUE
The strerror(), strerror_l(), and the GNU-specific strerror_r() func-
tions return the appropriate error description string, or an "Unknown
error nnn" message if the error number is unknown.
On success, strerrorname_np() and strerrordesc_np() return the appropri-
ate error description string. If errnum is an invalid error number,
these functions return NULL.
The XSI-compliant strerror_r() function returns 0 on success. On error,
a (positive) error number is returned (since glibc 2.13), or -1 is re-
turned and errno is set to indicate the error (before glibc 2.13).
POSIX.1-2001 and POSIX.1-2008 require that a successful call to str-
error() or strerror_l() shall leave errno unchanged, and note that,
since no function return value is reserved to indicate an error, an ap-
plication that wishes to check for errors should initialize errno to
zero before the call, and then check errno after the call.
ERRORS
EINVAL The value of errnum is not a valid error number.
ERANGE Insufficient storage was supplied to contain the error descrip-
tion string.
ATTRIBUTES
For an explanation of the terms used in this section, see attributes(7).
┌────────────────────┬───────────────┬─────────────────────────────────┐
│ Interface │ Attribute │ Value │
├────────────────────┼───────────────┼─────────────────────────────────┤
│ strerror() │ Thread safety │ MT-Safe │
├────────────────────┼───────────────┼─────────────────────────────────┤
│ strerrorname_np(), │ Thread safety │ MT-Safe │
│ strerrordesc_np() │ │ │
├────────────────────┼───────────────┼─────────────────────────────────┤
│ strerror_r(), │ Thread safety │ MT-Safe │
│ strerror_l() │ │ │
└────────────────────┴───────────────┴─────────────────────────────────┘
Before glibc 2.32, strerror() is not MT-Safe.
STANDARDS
strerror()
C11, POSIX.1-2008.
strerror_r()
strerror_l()
POSIX.1-2008.
strerrorname_np()
strerrordesc_np()
GNU.
POSIX.1-2001 permits strerror() to set errno if the call encounters an
error, but does not specify what value should be returned as the func-
tion result in the event of an error. On some systems, strerror() re-
turns NULL if the error number is unknown. On other systems, strerror()
returns a string something like "Error nnn occurred" and sets errno to
EINVAL if the error number is unknown. C99 and POSIX.1-2008 require the
return value to be non-NULL.
HISTORY
strerror()
POSIX.1-2001, C89.
strerror_r()
POSIX.1-2001.
strerror_l()
glibc 2.6. POSIX.1-2008.
strerrorname_np()
strerrordesc_np()
glibc 2.32.
NOTES
strerrorname_np() and strerrordesc_np() are thread-safe and async-sig-
nal-safe.
SEE ALSO
err(3), errno(3), error(3), perror(3), strsignal(3), locale(7), signal-
safety(7)
Linux man-pages 6.9.1 2024-06-15 strerror(3)
Generated by dwww version 1.16 on Tue Dec 16 04:18:53 CET 2025.