Разработка приложений в среде Linux - [196]

Шрифт
Интервал

>17:  };

>18:

>19:  optCon = poptGetContext("popt-nest", argc, argv, options, 0);

>20:

>21:  if ((rc = poptGetNextOpt (optCon)) < -1) {

>22:   fprintf(stderr, "%s: %s\n",

>23:    poptBadOption(optCon, POPT_BADOPTION_NOALIAS),

>24:   poptStrerror(rc));

>25:   return 1;

>26:  }

>27:

>28:  return 0;

>29: }

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: %s\n",

> poptBadOption(optCon, POPT_BADOPTION_NOALIAS),

> poptStrerror(rc));

26.5. Псевдонимы параметров

Одним из основных преимуществ использования библиотеки >popt по сравнению с функцией >getopt() является возможность использования псевдонимов параметров. Благодаря ним пользователь может определить параметры, которые >popt будет расширять их на другие параметры по мере их определения. Если стандартная программа >grep использовала >popt, то пользователи могли добавлять параметр >--text, который расширялся до >-i -n -Е -2, облегчая поиск информации в текстовых файлах.

26.5.1. Определение псевдонимов

Псевдонимы обычно определяются в двух местах: в >/etc/popt и в файле >.popt, хранящемся в домашнем каталоге пользователя (его можно найти через переменную окружения >HOME). Оба файла имеют одинаковую форму в виде произвольного количества строк, форматированных следующим образом:

>appname alias newoption expansion

>appname представляет имя приложения, которое должно быть таким же именем, как и имя в параметре >name, переданное функции >poptGetContext(). Благодаря этому в каждом файле можно определять псевдонимы для нескольких программ. Ключевое слово >alias указывает на то, что определяется псевдоним; на данный момент конфигурационные файлы >popt поддерживают только псевдонимы, однако в будущем появятся новые возможности. Следующим параметром является параметр, для которого необходимо задать псевдоним; это может быть как короткий, так и длинный параметр. Остальная часть строки определяет расширение псевдонима. Синтаксический анализ строки выполняется по аналогии с командой оболочки, в которой в качестве кавычек можно использовать символы


Рекомендуем почитать
Виртуальные  машины: несколько компьютеров в  одном

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.


Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.


Windows Vista. Мультимедийный курс

Эта книга поможет вам разобраться в премудростях операционной системы Windows Vista.Информационная насыщенность учебного материала позволяет утверждать, что мультимедийный курс будет интересен и новичкам, и опытным пользователям.


FAQ по смартфону Qtek 8300/8310

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Домашние и офисные сети под Vista и XP

Количество персональных компьютеров в нашей стране растет год от года. Сегодня во многих семьях имеется два или даже три компьютера.Чтобы воспользоваться всеми преимуществами такой ситуации, компьютеры в вашей квартире стоит объединить сетью. Это позволит вам играть по сети в компьютерные игры, совместно использовать дисковое пространство, принтеры, модемы и другие устройства, всю сеть можно соединить с Интернетом. А в офисах сеть между компьютерами просто необходима.Открывающиеся перспективы выглядят очень заманчиво.


Свободные программы и системы в школе

Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)