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

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

и >-display для приложений, предоставляя большинству программ X Window стандартный набор параметров командной строки для управления обычным поведением. К сожалению, сделать это далеко не просто. Если массивы >argc и >argv передать функции инициализации в библиотеке, то библиотека сможет обрабатывать соответствующие параметры, однако приложение должно знать, какие параметры необходимо проигнорировать во время синтаксического анализа >argv.

Чтобы не допустить возникновения этой проблемы, функция >XtAppInitialize() принимала массивы >argc и >argv в качестве параметров и возвращала новые значения для каждого из них с параметрами, обработанными удаленной библиотекой. Несмотря на то что такой подход мог работать, с ростом количества библиотек он стал излишне громоздким.

Чтобы выйти из этой ситуации, >popt позволяет формировать вложенные таблицы параметров. Благодаря этому подходу библиотеки определяют те параметры, которые им нужны для обработки (для этого может потребоваться еще одна вложенная таблица), а главная программа может предоставить эти параметры путем вложения таблиц с параметрами библиотек внутри самих себя.

Таблица параметров, которая будет представлена в форме вложенной таблицы, определяется подобно любой другой таблице. Чтобы включить ее в другую таблицу, необходимо создать новый параметр с пустыми параметрами >longName и >shortName. В поле >argInfo должна быть назначена переменная >POPT_ARG_INCLUDE_TABLE, а член >arg должен указывать на таблицу, представляемую в форме вложенной таблицы. Ниже показан пример таблицы параметров, включающей другую таблицу.

>struct poptOption nestedArgs[] = {

> { "option1", 'a', POPT_ARG_NONE, NULL, 'a' },

> { "option2", 'b', POPT_ARG_NONE, NULL, 'b' },

> { NULL, '\0', POPT_ARG_NONE, NULL, 0 }

>};


>struct poptOption mainArgs[] = {

> { "anoption", 'о', POPT_ARG_NONE, NULL, 'o' },

> { NULL, '\0', POPT_ARG_INCLUDE_TABLE, nestedArgs, 0 },

> { NULL, '\0', POPT_ARG_NONE, NULL, 0 }

>};

В этом примере приложение заканчивается тремя параметрами, >--option1, >--option2 и >--anoption. Более сложный пример с вложенными таблицами параметров рассматривается далее в главе.

26.2. Использование таблиц параметров

26.2.1. Создание содержимого

>popt может чередовать синтаксический анализ нескольких совокупностей командных строк. Для этого она сохраняет всю информацию о состоянии для определенной совокупности аргументов командных строк в структуре данных >poptContext непрозрачного типа, которую нельзя модифицировать вне библиотеки >popt.

Новое содержимое >popt формируется с помощью функции >poptGetContext().

>#include


>poptContext poptGetContext(char * name, int argc, const char ** argv,

> struct poptOption * options, int flags);

Первый параметр, >name, используется для работы с псевдонимами и в справочных сообщениях, и должен представлять имя того приложения, параметры которого будут проходить проверку синтаксиса. Следующие два параметра определяют те аргументы командной строки, которые будут проходить проверку синтаксиса. Как правило, они передаются функции >poptGetContext(), точно так, как если бы они передавались функции >main() программы[184]. Параметр >options указывает на таблицу параметров командной строки, которая была определена в предыдущем разделе. Последний параметр, >flags, определяет способ синтаксического анализа параметров и включает перечисленные ниже флаги (которые могут быть объединены битовым "ИЛИ").

>POPT_CONTEXT_KEEP_FIRSTКак правило, >popt игнорирует значение в >argv[0], которое обычно представляет имя выполняемой программы, а не аргумент командной строки. Если определить этот флаг, то >popt будет обрабатывать >argv[0] как параметр.
>POPT_CONTEXT_POSIXMEHADERСтандарт POSIX гласит, что все параметры должны стоять перед дополнительными параметрами командной строки. Например, в соответствии с POSIX, >rm -f file1 file2 приведет к удалению файлов >file1 и >file2, тогда как >rm file1 file2 -f приведет к обычному удалению трех файлов: >file1, >file2 и >-f. В большинстве Linux-программы это частное условие игнорируется, поэтому >popt не придерживается этого правила по умолчанию. Этот флаг сообщает библиотеке >popt о необходимости анализировать синтаксис параметров в соответствии с этим условием.

Помимо всего прочего, >poptContext следит за тем, какие параметры прошли проверку синтаксиса, а какие нет. Если программе необходимо перезапустить обработку параметров в наборе аргументов, она может восстановить исходное состояние >poptContext, передавая функции >poptResetContext() содержимое в качестве единственного аргумента.

После завершения обработки аргумента процесс должен освободить структуру >poptContext, поскольку в ней содержатся динамически размещаемые компоненты. Функция >poptFreeContext() принимает >poptContext в качестве своего единственного аргумента и освобождает ресурсы, занятые в содержимом.

Ниже представлены прототипы функций >poptResetContext() и >poptFreeContext().

>#include


>void poptFreeContext(poptContext con);

>void poptResetContext(poptContext con);

26.2.2. Синтаксический анализ командной строки

После того как приложение создаст >poptContext


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

Применение виртуальных машин дает различным категориям пользователей — от начинающих до 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)