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);