26.2. Использование таблиц параметров
26.2. Использование таблиц параметров
26.2.1. Создание содержимого
popt может чередовать синтаксический анализ нескольких совокупностей командных строк. Для этого она сохраняет всю информацию о состоянии для определенной совокупности аргументов командных строк в структуре данных poptContext непрозрачного типа, которую нельзя модифицировать вне библиотеки popt.
Новое содержимое popt формируется с помощью функции poptGetContext().
#include <popt.h>
poptContext poptGetContext(char * name, int argc, const char ** argv,
struct poptOption * options, int flags);
Первый параметр, name, используется для работы с псевдонимами и в справочных сообщениях, и должен представлять имя того приложения, параметры которого будут проходить проверку синтаксиса. Следующие два параметра определяют те аргументы командной строки, которые будут проходить проверку синтаксиса. Как правило, они передаются функции poptGetContext(), точно так, как если бы они передавались функции main() программы[184]. Параметр options указывает на таблицу параметров командной строки, которая была определена в предыдущем разделе. Последний параметр, flags, определяет способ синтаксического анализа параметров и включает перечисленные ниже флаги (которые могут быть объединены битовым "ИЛИ").
Помимо всего прочего, poptContext следит за тем, какие параметры прошли проверку синтаксиса, а какие нет. Если программе необходимо перезапустить обработку параметров в наборе аргументов, она может восстановить исходное состояние poptContext, передавая функции poptResetContext() содержимое в качестве единственного аргумента.
После завершения обработки аргумента процесс должен освободить структуру poptContext, поскольку в ней содержатся динамически размещаемые компоненты. Функция poptFreeContext() принимает poptContext в качестве своего единственного аргумента и освобождает ресурсы, занятые в содержимом.
Ниже представлены прототипы функций poptResetContext() и poptFreeContext().
#include <popt.h>
void poptFreeContext(poptContext con);
void poptResetContext(poptContext con);