Книга: Разработка приложений в среде Linux. Второе издание
26.4. Обработка ошибок
26.4. Обработка ошибок
Каждая из функций popt
, которая может возвращать ошибки, возвращает целочисленные значения. В случае возникновения ошибки возвращается отрицательный код. В табл. 26.2 перечислены коды возможных ошибок. После таблицы дается подробное обсуждение каждой ошибки.
Таблица 26.2. Коды ошибок popt
Код ошибки | Описание |
---|---|
POPT_ERROR_NOARG |
Отсутствует аргумент для данного параметра. |
POPT_ERROR_BADOPT |
Невозможно проанализировать синтаксис аргумента параметра. |
POPT_ERROR_OPTSTOODEEP |
Слишком глубокое вложение замещений имени параметра. |
POPT_ERROR_BADQUOTE |
Несоответствие кавычек. |
POPT_ERROR_BADNUMBER |
Невозможно преобразовать параметр в число. |
POPT_ERROR_OVERFLOW |
Данное число слишком большое или слишком маленькое. |
POPT_ERROR_NOARG |
Параметр, для которого требуется аргумент, был определен в командной строке, однако аргумент не был предоставлен. Эта ошибка может быть возвращена только функцией poptGetNextOpt() . |
POPT_ERROR_BADOPT |
Параметр был определен в массиве argv , однако его нет в таблице параметров. Эта ошибка может быть возвращена только функцией poptGetNextOpt() . |
POPT_ERROR_OPTSTOODEEP |
Совокупность замещений имени параметра имеет большую глубину вложений. На данный момент popt отслеживает параметры только до 10 уровня, чтобы избежать возникновения бесконечной рекурсии. Эту ошибку возвращает только функция poptGetNextOpt() . |
POPT_ERROR_BADQUOTE |
В строке, прошедшей синтаксический анализ, было обнаружено несоответствие кавычек (например, была обнаружена только одна одинарная кавычка). Эту ошибку могут возвращать функции poptParseArgvString() , poptReadConfigFile() и poptReadDefaultConfig() . |
POPT_ERROR_BADNUMBER |
Преобразование строки в число (int или long ) не было выполнено вследствие того, что строка содержит нецифровые символы. Эта ошибка возникает в том случае, когда функция poptGetNextOpt() обрабатывает аргумент типа РOРТ_ARG_INT или POPT_ARG_LONG . |
POPT_ERROR_OVERFLOW |
Преобразование из строки в число не было выполнено вследствие того, что число было слишком большим или слишком маленьким. Подобно ошибке POPT_ERROR_BADNUMBER , эта ошибка может возникнуть только в том случае, если функция poptGetNextOpt() обрабатывает аргумент типа РОРТ_ARG_INT или POPT_ARG_LONG . |
POPT_ERROR_ERRNO |
Системный вызов был возвращен вместе с ошибкой, а errno до сих пор содержит ошибку из системного вызова. Эту ошибку могут возвращать функции poptReadConfigFile() и poptReadDefaultConfig() . |
Приложения могут генерировать качественные сообщения об ошибках с помощью следующих двух функций.
const char * poptStrerror(const int error);
Эта функция принимает код ошибки popt
и возвращает строку с описанием ошибки, как и стандартная функция strerror()
.
char * poptBadOption(poptContext con, int flags);
Если во время выполнения функции poptGetNextOpt()
возникла ошибка, эта функция возвращает параметр, вызвавший ошибку. Если аргументу flags
присвоено значение POPT_BADOPTION_NOALIAS
, возвращается самый внешний параметр. В противном случае аргумент flags
должен иметь нулевое значение, а возвращаемый параметр может быть определен посредством псевдонима.
Для большинства приложений эти две функции существенно упрощают обработку ошибок popt
. Если ошибка возникает во время выполнения большинства функций, то выводится сообщение об ошибке, а функция poptStrerror()
возвращает строку с описанием ошибки. Если ошибка возникла во время синтаксического анализа аргумента, то код, подобный представленному ниже, отобразит информативное сообщение об ошибке.
fprintf(stderr, "%s: %sn",
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
poptStrerror(rc));
- Перехват ошибок
- Обработка перехваченных ошибок
- ГЛАВА 4 Обработка исключений
- B1.7. Функции обработки ошибок
- Обработка ошибок
- 26.7. Обработка дополнительных аргументов
- Проверка диска на наличие ошибок
- А.2. Поиск ошибок в динамической памяти
- Векторная обработка исключений
- Обработка исключений
- 2.2. Базовая обработка командной строки
- Пример: обработка ошибок