Разработка приложений в среде 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
![Виртуальные машины: несколько компьютеров в одном](/storage/book-covers/d3/d3d21efc0138d31faad0917369f9053e064085e5.jpg)
Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.
![Недокументированные и малоизвестные возможности Windows XP](/storage/book-covers/3c/3c1be627c1d69a562e3fca9dc54a9a80bbae29e0.jpg)
Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.
![Windows Vista. Мультимедийный курс](/storage/book-covers/90/9076fd7cf40e08475c322090e7c5bab39a1bf5f1.jpg)
Эта книга поможет вам разобраться в премудростях операционной системы Windows Vista.Информационная насыщенность учебного материала позволяет утверждать, что мультимедийный курс будет интересен и новичкам, и опытным пользователям.
![FAQ по смартфону Qtek 8300/8310](/storage/book-covers/02/029347a6079e3c00093e55140234dcb20c9c97fa.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Домашние и офисные сети под Vista и XP](/storage/book-covers/60/60ea92e91fc065c1a8fc203657d970b52abd1821.jpg)
Количество персональных компьютеров в нашей стране растет год от года. Сегодня во многих семьях имеется два или даже три компьютера.Чтобы воспользоваться всеми преимуществами такой ситуации, компьютеры в вашей квартире стоит объединить сетью. Это позволит вам играть по сети в компьютерные игры, совместно использовать дисковое пространство, принтеры, модемы и другие устройства, всю сеть можно соединить с Интернетом. А в офисах сеть между компьютерами просто необходима.Открывающиеся перспективы выглядят очень заманчиво.
![Свободные программы и системы в школе](/build/oblozhka.dc6e36b8.jpg)
Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)