Читаем Разработка приложений в среде Linux. Второе издание полностью

Первый параметр, 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);

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

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

#include

int poptGetNextOpt(poptContext con);

Принимая содержимое в качестве своего единственного аргумента, эта функция анализирует синтаксис следующего обнаруженного аргумента командной строки. После того как следующий аргумент будет обнаружен в таблице параметров, функция заполняет объект, на который указывает указатель arg элемента таблицы параметров, если только он не равен NULL. Если элемент val для параметра имеет ненулевое значение, функция возвращает это значение. В противном случае функция poptGetNextOpt() переходит к следующему аргументу.

Функция poptGetNextOpt() возвращает значение -1, если был проанализирован синтаксис последнего аргумента, и другие отрицательные значения в случае возникновения ошибки. Поэтому лучше всего присваивать элементам val в таблице параметров значения больше нуля.

Если все параметры командной строки обрабатываются через указатели arg, то синтаксический анализ командной строки сокращается до следующей строки кода:

rc = poptGetNextOpt(poptcon);

Тем не менее, для многих приложений требуется более сложный синтаксический анализ командной строки, нежели этот, и применяется показанная ниже структура.

while ((rc = poptGetNextOpt(poptcon)) > 0) {

 switch (rc) {

  /* здесь обрабатываются специфические аргументы */

 }

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных