void
err(
int status
, const char *fmt
, ...
)
void
verr(
int status
, const char *fmt
, va_list args
)
void
errx(
int status
, const char *fmt
, ...
)
void
verrx(
int status
, const char *fmt
, va_list args
)
void
warn(
const char *fmt
, ...
)
void
vwarn(
const char *fmt
, va_list args
)
void
warnx(
const char *fmt
, ...
)
void
vwarnx(
const char *fmt
, va_list args
)
)
and
warn(
)
family of functions display a formatted error message on the standard
error output.
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 formatted error message is output.
In the case of the
err(
),
verr(
),
warn(
),
and
vwarn(
)
functions, the error message string affiliated with the current value of
the global variable
errno
is output next, preceded by a colon character and a space if
fmt
is not
NULL
.
In all cases, the output is followed by a newline character.
The
errx(
),
verrx(
),
warnx(
),
and
vwarnx(
)
functions will not output this error message string.
The
err(),
verr(
),
errx(
),
and
verrx(
)
functions do not return, but instead cause the program to terminate
with the status value given by the argument
status
.
It is often appropriate to use the value
EXIT_FAILURE
,
defined in
<stdlib.h>,
as the
status
argument given to these functions.
if ((p = malloc(size)) == NULL)
err(EXIT_FAILURE, NULL);
if ((fd = open(file_name, O_RDONLY, 0)) == -1)
err(EXIT_FAILURE, "%s", file_name);
Display an error message and terminate with status indicating failure:
if (tm.tm_hour < START_TIME)
errx(EXIT_FAILURE, "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)
warn("%s", block_device);
)
and
warn(
)
functions first appeared in
4.4BSD.
),
as the resulting string may still contain user-supplied conversion specifiers
for later interpolation by the
err(
)
and
warn(
)
functions.
Always be sure to use the proper secure idiom:
err(1, "%s", string);