May 22, 2006 STRERROR 3

### NAME

perror, strerror, strerror_r, sys_errlist, sys_nerr - system error messages

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```void` perror(```const char *string`)
```char *` strerror(```int errnum`)
```int` strerror_r(```int errnum``, char *strerrbuf``, size_t buflen`)

### DESCRIPTION

The strerror(``), strerror_r(``), and perror(``) functions look up the language-dependent error message string corresponding to an error number.

The strerror(``) function accepts an error number argument ```errnum` and returns a pointer to the corresponding message string.

The strerror_r(``) function renders the same result into ```strerrbuf` for a maximum of ```buflen` characters and returns 0 upon success.

The perror(``) function finds the error message corresponding to the current value of the global variable errno (intro(2)) and writes it, followed by a newline, to the standard error file descriptor. If the argument ```string` is non-```NULL` and does not point to the nul character, this string is prepended to the message string and separated from it by a colon and space (`````:` ''); otherwise, only the error message string is printed.

If the error number is not recognized, these functions pass an error message string containing `````Unknown error:` '' followed by the error number in decimal. To warn about this, strerror(``) sets ```errno` to ```EINVAL`, and strerror_r(``) returns ```EINVAL`. Error numbers recognized by this implementation fall in the range 0 < ```errnum` < ```sys_nerr`.

If insufficient storage is provided in ```strerrbuf` (as specified in ```buflen`) to contain the error string, strerror_r(``) returns ```ERANGE` and ```strerrbuf` will contain an error message that has been truncated and ```NUL` terminated to fit the length specified by ```buflen`.

The message strings can be accessed directly using the external array sys_errlist. The external value sys_nerr contains a count of the messages in sys_errlist. The use of these variables is deprecated; strerror(``) or strerror_r(``) should be used instead.

### SEE ALSO

intro(2), psignal(3)

### STANDARDS

The perror(``) and strerror(``) functions conform to ISO/IEC 9899:1999 (``ISO C99'') . The strerror_r(``) function conforms to IEEE Std 1003.1-2001 (``POSIX.1'') .

### HISTORY

The strerror(``) and perror(``) functions first appeared in 4.4BSD. The strerror_r(``) function first appeared in NetBSD4.0.

### BUGS

For unknown error numbers, the strerror(``) function will return its result in a static buffer which may be overwritten by subsequent calls.

The return type for strerror(``) is missing a type-qualifier; it should actually be

Programs that use the deprecated sys_errlist variable often fail to compile because they declare it inconsistently.