Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

Следующий элемент добавляет параметр

– -text
в команду
grep
, как было предложено в начале этого раздела.

grep alias --text -i -n -E -2

26.5.2. Разрешение псевдонимов

Приложение должно разрешать разворачивание псевдонимов для

popContext
перед первым вызовом функции
poptGetNextOpt
. Псевдонимы для содержимого определяются с помощью трех функций.

int poptReadDefaultConfig(poptContext con, int flags);

Эта функция считывает псевдонимы из

/etc/popt
и файла
.popt
в домашнем каталоге пользователя. На данный момент
flags
должен иметь нулевое значение, поскольку он зарезервирован только для будущего использования.

int poptReadConfigFile(poptContext con, char * fn);

Файл, определяемый посредством

fn
, открывается и анализируется как конфигурационный файл
popt
. Это позволяет программам использовать конфигурационные файлы конкретных программ.

int poptAddAlias(poptContext con, struct poptAlias alias, int flags);

В некоторых случаях в программах необходимо определять псевдонимы, не читая их из конфигурационного файла. Эта функция добавляет новый псевдоним в содержимое. Аргумент

flags
должен иметь нулевое значение, и в настоящий момент он зарезервирован только для будущего использования. Новый псевдоним определяется как
struct poptAlias
следующим образом:

struct poptAlias {

 char * longName; /* может быть NULL */

 char shortName; /* может быть '\0' */

 int argc;

 char ** argv; /*должна быть возможность освобождения с помощью free*/

};

Первые два элемента,

longName
и
shortName
, определяют параметр, для которого вводится псевдоним. Два последних аргумента,
argc
и
argv
, определяют разворачивание, которое будет использовано при обнаружении псевдонима параметра.

26.6. Синтаксический анализ строк аргументов

Хотя библиотека

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

#include <popt.h>

int poptParseArgvString(char * s, int * argcPtr, char *** argvPtr);

Строка

s
разбирается в массив
argv
. Целочисленное значение, на которое указывает второй параметр,
argcPtr
, содержит количество проанализированных элементов, а указатель, на который ссылается последний параметр, указывает на вновь созданный массив. Размещение массива осуществляется динамически; после того как приложение завершит работу с массивом, необходимо вызвать функцию
free
.

Массив

argvPtr
, созданный функцией
poptParseArgvString
, подходит для прямой передачи функции
poptGetContext
[187] .

26.7. Обработка дополнительных аргументов

Некоторые приложения реализуют эквивалент псевдонимов параметров, однако для этого им необходима специальная логика. Функция

poptStuffArgs
позволяет приложению вставлять новые аргументы в текущую структуру
poptContext
.

187

Часто в подобных случаях удобно использовать

POPT_CONTEXT_KEEP_FIRST
.

#include <popt.h>

int poptStuffArgs(poptContext con, char ** argv);

Передаваемый массив

argv
должен иметь указатель
NULL
в качестве своего последнего элемента. Когда функция
poptGetNextContext
будет вызвана в следующий раз, то анализироваться будут сначала "заполненные" аргументы. Библиотека popt возвращает обычные аргументы после того, как закончатся все "заполненные".

  • Читать дальше
  • 1
  • ...
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: