НАИМЕНОВАНИЕ

getopt - получает опциоанальный параметр из argv


РЕЗЮМЕ



ОПИСАНИЕ

Функция getopt возвращает очередной флаг из массива argv, соответствующий какой-либо букве в цепочке optstring. Optstring это строка из вариантов опций; Если за флагом следует двоеточие, то предполагается, что опция имеет аргумент или группу аргументов, отделенных от флага пробелами или табуляциями.В переменную optarg помещается указатель на начало аргумента распознанной опции.

После каждого вызова функция getopt помещает во внешнюю переменную optind индекс того элемента массива argv, который должен обрабатываться следующим. Поскольку optind является внешним, оно, как правило, инициализированно в нуль автоматически до первого вызова getopt

Когда все параметры обработаны (т.е. до первого неопционального аргумента), getopt возвращает EOF. Для ограничения конца опций, может быть использована спецопция --. В этом случее возвращен будет EOF а -- будет пропущен.


ДИАГНОСТИКА

Функция getopt выводит сообщения об ошибках на stderr и возвращает символы вопроса (?) когда сталкивается с символом невключенным в optstring.


ПРИМЕРЫ

Нижеприведенный фрагмент кода показывает каким образом можно обрабатывать аргументы комманды, которые могут содержать взаимоисключающие опции a и b, и опции f и o, которые требуют аргументов:

         main(argc, argv)
int argc;
char **argv;
{
int c;
extern int optind;
extern char *optarg;
.
.
.
while ((c = getopt(argc, argv, "abf:o:")) != EOF)
switch (c) {
case `a':
if (bflg)
errflg++;
else
aflg++;
break;
case `b':
if (aflg)
errflg++;
else
bproc();
break;
case `f':
ifile = optarg;
break;
case `o':
ofile = optarg;
break;
case `?':
default:
errflg++;
break;
}
if (errflg) {
fprintf(stderr, "Usage: ...");
exit(2);
}
for (; optind < argc; optind++) {
.
.
.
}
.
.
.
}



ИСТОРИЯ

Написано Henry Spencer, для страниц руководства Bell Labs. Модифицировано Keith Bostic для большей совместимости с System V версией.


ОШИБКИ

Не обязательно чтобы '-' стоял отдельно. В этой версии это рассматривается как неопциональный аргумент, что не всегда правильно.

Аргументы опций могут начинаться с '-'; это уменьшает количество возможных ошибок.

Функция getopt довольно гибкая, но очевидно что многое она неумеет, например проверка взаимоисключающих аргументов, проверка типа аргументов и т.п.

деревянные евроокна установка Справка, какой марки какой телевизор лучше купить в москве.