В.З. Стандартные функции вывода сообщений об ошибках
Мы определили свой набор функций, используемых во всех программах книги для обработки ситуаций с возникновением ошибок. Причина, по которой мы создаем эти функции, заключается в том, что теперь мы можем писать команды в одну строку:
if (условие_ошибки) err_sys(формат printf с произвольным количеством аргументов);
вместо:
if (условие_ошибки) {
char buff[200];
snprintf(buff, sizeof(buff), формат printf с произвольным количеством аргументов);
perror(buff);
exit(1);
}
Функции обработки ошибок используют возможности работы со списком аргументов переменной длины, определенные стандартом ANSI С. В разделе 7.3 [ 11 ] вы можете узнать подробности.
В таблице В.1 приведены отличия между различными функциями обработки ошибок. Если глобальное целое daemon_proc отлично от нуля, сообщение передается демону syslog с указанным уровнем (см. главу 12 [24]); в противном случае сообщение выводится в стандартный поток сообщений об ошибках.
Таблица В.1. Функции обработки ошибок
Функция | strerror(errno)? | Завершение? | Уровень syslog |
---|---|---|---|
err_dump | Да | abort(); | LOG_ERR |
err_msg | Нет | return; | LOG_INFO |
err_quit | Нет | exit(1); | LOG_ERR |
err_ret | Да | return; | LOG_INFO |
err_sys | Да | exit(1); | LOG_ERR |
В листинге В.3 приведен текст функций из табл. В.1.