Г.3. Стандартные функции обработки ошибок
Г.3. Стандартные функции обработки ошибок
В этой книге мы определяем набор своих собственных функций для обработки ошибок. Причина, по который мы создаем эти функции, заключается в том, что они позволяют нам обрабатывать ошибки с помощью одной строки кода, как, например, показано ниже:
if (условие ошибки)
err_sys(формат printf с любым количеством аргументов);
вместо
if (условие ошибки) {
char buff[200];
snprintf(buff, sizeof(buff), формат printf с любым количеством аргументов);
perror(buff);
exit(1);
}
Наши функции обработки ошибок используют следующую возможность ANSI С: список аргументов может иметь переменную длину. Более подробную информацию об этом вы найдете в разделе 7.3 книги [68].
В табл. Г.1 показано, в чем заключаются различия между функциями обработки ошибок. Если глобальная целочисленная переменная daemon_proc отлична от нуля, то сообщение об ошибке передается функции syslog с указанным уровнем, в противном случае оно отправляется в стандартный поток вывода сообщений об ошибках.
Таблица Г.1. Стандартные функции обработки ошибок
В листинге Г.3 показаны первые пять функций из табл. Г.1.
Листинг Г.3. Стандартные функции обработки ошибок
//lib/error.c
1 #include "unp.h"
2 #include <stdarg.h> /* заголовочный файл ANSI С */
3 #include <syslog.h> /* для syslog() */
4 int daemon_proc; /* устанавливается в ненулевое значение с
помощью daemon_init() */
5 static void err_doit(int, int, const char*, va_list);
6 /* Нефатальная ошибка, связанная с системным вызовом.
7 Выводим сообщение и возвращаем управление */
8 void
9 err_ret(const char *fmt , ...)
10 {
11 va_list ap;
12 va_start(ap, fmt);
13 err_doit(1, LOG_INFO, fmt, ap);
14 va_end(ap);
15 return;
16 }
17 /* Фатальная ошибка, связанная с системным вызовом.
18 Выводим сообщение и завершаем работу */
19 void
20 err_sys(const char *fmt)
21 {
22 va_list ap;
23 va_start(ap, fmt);
24 err_doit(1, LOG_ERR, fmt, ap);
25 va_end(ap);
26 exit(1);
27 }
28 /* Фатальная ошибка, связанная с системным вызовом.
29 Выводим сообщение, сохраняем дамп памяти процесса и заканчиваем работу */
30 void
31 err_dump(const char *fmt, ... )
32 {
33 va_list ар;
34 va_start(ap, fmt);
35 err_doit(1, LOG_ERR, fmt, ap);
36 va_end(ap);
37 abort(); /* сохраняем дамп памяти и заканчиваем работу */
38 exit(1);
39 }
40 /* Нефатальная ошибка, не относящаяся к системному вызову.
41 Выводим сообщение и возвращаем управление */
42 void
43 err_msg(const char *fmt , ...)
44 {
45 va_list ap;
46 va_start(ap, fmt);
47 err_doit(0, LOG_INFO, fmt, ap);
48 va_end(ap);
49 return;
50 }
51 /* Фатальная ошибка, не относящаяся к системному вызову.
52 Выводим сообщение и заканчиваем работу. */
53 void
54 err_quit(const char *fmt, ...)
55 {
56 va_list ap;
57 va_start(ap, fmt);
58 err_doit(0, LOG_ERR, fmt, ap);
59 va_end(ap);
60 exit(1);
61 }
62 /* Выводим сообщение и возвращаем управление.
63 Вызывающий процесс задает "errnoflag" и "level" */
64 static void
65 err_doit(int errnoflag, int level, const char *fmt, va_list ap)
66 {
67 int errno_save, n;
68 char buf[MAXLINE + 1];
69 errno_save = errno; /* значение может понадобиться вызвавшему
процессу */
70 #ifdef HAVE_VSNPRINTF
71 vsnprintf(buf, MAXLINE, fmt, ap); /* защищенный вариант */
72 #else
73 vsprintf(buf, fmt, ap); /* незащищенный вариант */
74 #endif
75 n = strlen(buf);
76 if (errnoflag)
77 snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));
78 strcat(buf, " ");
79 if (daemon_proc) {
80 syslog(level, buf);
81 } else {
82 fflush(stdout); /* если stdout и stderr совпадают */
83 fputs(buf, stderr);
84 fflush(stderr);
85 }
86 return;
87 }
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Функции обработки ошибок
Функции обработки ошибок error_logПосылка сообщения об ошибке.Синтаксис:int error_log(string message, int message_type [, string destination [, string extra_headers]])Сообщение, посылаемое этой функцией, может быть направлено в журнал системных сообщений web-сервера, прот TCP или в файл.В первом аргументе message
1.4. Обработка ошибок: функции-обертки
1.4. Обработка ошибок: функции-обертки В любой реальной программе существенным моментом является проверка каждого вызова функции на предмет возвращаемой ошибки. В листинге 1.1 мы проводим поиск ошибок в вызовах функций socket, inet_pton, connect, read и fputs, и когда ошибка случается, мы
16.3.10. Директивы обработки ошибок
16.3.10. Директивы обработки ошибок Такая директива всего одна, но она очень полезна. Например, произошла ошибка 404 (файл не найден). Вы можете сопоставить этой ошибке URL, на который будет перенаправлен браузер пользователя. Обычно перенаправление устанавливают на документ,
Улучшение посещаемости сайта за счет обработки ошибок
Улучшение посещаемости сайта за счет обработки ошибок Существуют очень простые, но почему-то не всегда используемые методы увеличения числа посетителей сайта за счет тех, кто стремится попасть к вам по устаревшей ссылке. Ясно, что любой сайт подвергается постоянной
Стандартные математические функции
Стандартные математические функции ABS (X) – абсолютная величина X.ARCTAN (X) – вычисление угла в радианах, тангенс которого равен X.COS (X) – вычисление косинуса угла в радианах.EXP (X) – Вычисление ex.LN (X) – вычисление натурального логарифма от X.PI – вычисление числа Пи.RANDOM –
Стандартные математические функции
Стандартные математические функции Для того, чтобы использовать эти функции в начале программы должно стоять:#include <math. h>abs (x) – возвращает абсолютное значение целого аргумента x.acos (x) – арккосинус x.asin (x) – арксинус x.atan (x) – арктангенс x.cos (x) – косинус x.exp (x) – ex.fabs
Функции Transact-SQL для обработки даты/времени
Функции Transact-SQL для обработки даты/времени Стандарт SQL-92 специфицирует только функции, возвращающие системную дату/время. Например, функция CURRENT_TIMESTAMP возвращает сразу и дату, и время. Плюс имеются функции возвращающие что-либо одно.Естественно, в силу такой
2. Стандартные процедуры и функции
2. Стандартные процедуры и функции Арифметические функции1. Function Abs(X);Возвращает абсолютное значение параметра.X – выражение вещественного или целочисленного типа.2. Function ArcTan(X: Extended): Extended;Возвращает арктангенс аргумента.X – выражение вещественного или целочисленного
1.6. Обработка ошибок: функции-обертки
1.6. Обработка ошибок: функции-обертки В любой реальной программе при любом вызове требуется проверка возвращаемого значения на наличие ошибки. Поскольку обычно работа программ при возникновении ошибок завершается, мы можем сократить объем текста, определив
В.З. Стандартные функции вывода сообщений об ошибках
В.З. Стандартные функции вывода сообщений об ошибках Мы определили свой набор функций, используемых во всех программах книги для обработки ситуаций с возникновением ошибок. Причина, по которой мы создаем эти функции, заключается в том, что теперь мы можем писать команды в
69. Определите разумную стратегию обработки ошибок и строго ей следуйте
69. Определите разумную стратегию обработки ошибок и строго ей следуйте РезюмеЕще на ранней стадии проектирования разработайте практичную, последовательную и разумную стратегию обработки ошибок и строго следуйте ей. Убедитесь, что ваша стратегия включает
Директива обработки ошибок
Директива обработки ошибок В СП ТС реализована директива #error. Ее формат:#error <текст>Обычно эту директиву записывают среди директив условной компиляции для обнаружения некоторой недопустимой ситуации. По директиве #error препроцессор прерывает компиляцию и выдает
5.6. Стандартные потоки ввода, вывода и ошибок
5.6. Стандартные потоки ввода, вывода и ошибок С каждым процессом (командой, сценарием и т. п.), выполняемым в интерпретаторе shell, связан ряд открытых файлов, из которых процесс может читать свои данные, и в которые он может записывать их. Каждый из этих файлов
5.2. Стандартные служебные программы: Пуск | Все программы | Стандартные | Служебные
5.2. Стандартные служебные программы: Пуск | Все программы | Стандартные | Служебные В программной группе Стандартные | Служебные находятся следующие программы:? Internet Explorer (без надстроек) — запускает IE без надстроек, что поможет в случае, если какая-то из надстроек
4. Стандартные процедуры и функции
4. Стандартные процедуры и функции Арифметические функции1. Function Abs(X); возвращает абсолютное значение параметра.2. Function ArcTan(X: Extended): Extended; возвращает арктангенс аргумента.3. Function Exp(X: Real): Real; возвращает экспоненту.4. Function Frac(X: Real): Real; возвращает дробную часть аргумента.5. Function