err(3) форматирует сообщения

Other Alias

verr, errx, verrx, warn, vwarn, warnx, vwarnx

ОБЗОР

#include <err.h>


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

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

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

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

#include <stdarg.h>

void verr(int eval, 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 vwarnx(const char *fmt, va_list args);

ОПИСАНИЕ

Семейства функций err() и warn() выводят форматированное сообщение об ошибке в стандартный поток ошибок. При выводе всегда показывается последний компонент имени программы, двоеточие и пробел. Если значение fmt не равно NULL, то выводится сообщение об ошибке, отформатированное согласно printf(3). Вывод завершается символом новой строки.

Функции err(), verr(), warn() и vwarn() добавляют сообщение об ошибке, полученное от strerror(3) для значения глобальной переменной errno, начиная его с двоеточия и пробела, если значение fmt равно NULL.

Функции errx() и warnx() не добавляют сообщение об ошибке.

Функции err(), verr(), errx() и verrx() не возвращают управление в программу, а завершают её с кодом выхода, равным значению eval.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
ИнтерфейсАтрибутЗначение
err(), errx(),
warn(), warnx(),
verr(), verrx(),
vwarn(), vwarnx()
безвредность в нитяхбезвредно (MT-Safe locale)

СООТВЕТСТВИЕ СТАНДАРТАМ

Эти функции являются расширениями BSD.

ПРИМЕР

Показать строку с информацией о текущем errno и закончить работу:
p = malloc(size);
if (p == NULL)
    err(1, NULL);
fd = open(file_name, O_RDONLY, 0);
if (fd == -1)
    err(1, "%s", file_name);

Показать сообщение об ошибке и закончить работу:

if (tm.tm_hour < START_TIME)
    errx(1, "слишком рано, ждём до %s", start_time_string);

Предупреждение об ошибке:

fd = open(raw_device, O_RDONLY, 0);
if (fd == -1)
    warnx("%s: %s: пробуем блочное устройство",
            raw_device, strerror(errno));
fd = open(block_device, O_RDONLY, 0);
if (fd == -1)
    err(1, "%s", block_device);