Книга: Разработка приложений в среде Linux. Второе издание

26.1.2. Вложенные таблицы параметров

26.1.2. Вложенные таблицы параметров

Некоторые библиотеки предлагают реализацию набора общих параметров командной строки. Например, одно из первых инструментальных средств X Window обрабатывало параметры -geometry и -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, '', POPT_ARG_NONE, NULL, 0 }
};
struct poptOption mainArgs[] = {
 { "anoption", 'о', POPT_ARG_NONE, NULL, 'o' },
 { NULL, '', POPT_ARG_INCLUDE_TABLE, nestedArgs, 0 },
 { NULL, '', POPT_ARG_NONE, NULL, 0 }
};

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

Оглавление книги


Генерация: 1.507. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз