---
name: "err"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/err"
---

# err(3)

formatted error messages

## NAME

**err**, **verr**, **errc**, **verrc**, **errx**, **verrx**, **warn**, **vwarn**, **warnc**, **vwarnc**, **warnx**, **vwarnx**, **err\_set\_exit**, #ifdef UNIFDEF\_BLOCKS **err\_set\_exit\_b**, #endif **err\_set\_file** – formatted error messages

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<err.h\>**

*void*\

**err**(*int eval*, *const char \*fmt*, *...*);

*void*\

**err\_set\_exit**(*void (\*exitf)(int)*); #ifdef UNIFDEF\_BLOCKS

*void*\

**err\_set\_exit\_b**(*void (^exitb)(int)*); #endif

*void*\

**err\_set\_file**(*void \*vfp*);

*void*\

**errc**(*int eval*, *int code*, *const char \*fmt*, *...*);

*void*\

**errx**(*int eval*, *const char \*fmt*, *...*);

*void*\

**warn**(*const char \*fmt*, *...*);

*void*\

**warnc**(*int code*, *const char \*fmt*, *...*);

*void*\

**warnx**(*const char \*fmt*, *...*);

**#include \<stdarg.h\>**

*void*\

**verr**(*int eval*, *const char \*fmt*, *va\_list args*);

*void*\

**verrc**(*int eval*, *int code*, *const char \*fmt*, *va\_list args*);

*void*\

**verrx**(*int eval*, *const char \*fmt*, *va\_list args*);

*void*\

**vwarn**(*const char \*fmt*, *va\_list args*);

*void*\

**vwarnc**(*int code*, *const char \*fmt*, *va\_list args*);

*void*\

**vwarnx**(*const char \*fmt*, *va\_list args*);

## DESCRIPTION

The **err**() and **warn**() family of functions display a formatted error message on the standard error output, or on another file specified using the **err\_set\_file**() function. In all cases, the last component of the program name, a colon character, and a space are output. If the *fmt* argument is not NULL, the[printf(3)](/printf/3.md) -like formatted error message is output. The output is terminated by a newline character.

The **err**(), **errc**(), **verr**(), **verrc**(), **warn**(), **warnc**(), **vwarn**(), and **vwarnc**() functions append an error message obtained from [strerror(3)](/strerror/3.md) based on a supplied error code value or the global variable *errno*, preceded by another colon and space unless the *fmt* argument is NULL.

In the case of the **errc**(), **verrc**(), **warnc**(), and **vwarnc**() functions, the *code* argument is used to look up the error message.

The **err**(), **verr**(), **warn**(), and **vwarn**() functions use the global variable *errno* to look up the error message.

The **errx**() and **warnx**() functions do not append an error message.

The **err**(), **verr**(), **errc**(), **verrc**(), **errx**(), and **verrx**() functions do not return, but exit with the value of the argument *eval*. It is recommended that the standard values defined in [sysexits(3)](/sysexits/3.md) be used for the value of *eval*. The **err\_set\_exit**() function can be used to specify a function which is called before [exit(3)](/exit/3.md) to perform any necessary cleanup; passing a null function pointer for *exitf* resets the hook to do nothing. #ifdef UNIFDEF\_BLOCKS The **err\_set\_exit\_b**() function is like **err\_set\_exit**() except it takes a block pointer instead of a function pointer.

Note: The **Block\_copy**() function (defined in ⟨Blocks.h⟩) is used by **err\_set\_exit\_b**() to make a copy of the block, especially for the case when a stack-based block might go out of scope when the subroutine returns.

\#endif The **err\_set\_file**() function sets the output stream used by the other functions. Its *vfp* argument must be either a pointer to an open stream (possibly already converted to void \*) or a null pointer (in which case the output stream is set to standard error).

## EXAMPLES

Display the current errno information string and exit:

```
if ((p = malloc(size)) == NULL)
	err(EX_OSERR, NULL);
if ((fd = open(file_name, O_RDONLY, 0)) == -1)
	err(EX_NOINPUT, "%s", file_name);
```

Display an error message and exit:

```
if (tm.tm_hour < START_TIME)
	errx(EX_DATAERR, "too early, wait until %s",
	    start_time_string);
```

Warn of an error:

```
if ((fd = open(raw_device, O_RDONLY, 0)) == -1)
	warnx("%s: %s: trying the block device",
	    raw_device, strerror(errno));
if ((fd = open(block_device, O_RDONLY, 0)) == -1)
	err(EX_OSFILE, "%s", block_device);
```

Warn of an error without using the global variable *errno*:

```
error = my_function();	/* returns a value from <errno.h> */
if (error != 0)
	warnc(error, "my_function");
```

## SEE ALSO

[exit(3)](/exit/3.md), [fmtmsg(3)](/fmtmsg/3.md), [printf(3)](/printf/3.md), [strerror(3)](/strerror/3.md), [sysexits(3)](/sysexits/3.md)

## HISTORY

The **err**() and **warn**() functions first appeared in 4.4BSD. The **err\_set\_exit**() and **err\_set\_file**() functions first appeared in FreeBSD 2.1. The **errc**() and **warnc**() functions first appeared in FreeBSD 3.0. #ifdef UNIFDEF\_BLOCKS The **err\_set\_exit\_b**() function first appeared in Mac OS X 10.6. #endif
