|
GETOPT(3C)НАЗВАНИЕ СИНТАКСИС int getopt (argc, argv, optstring) int argc; char **argv, *optstring; extern char *optarg; extern int optind, opterr; ОПИСАНИЕ Цепочка optstring должна содержать флаги, которые будут распознаваться программой, использующей getopt. Если за флагом следует двоеточие, то предполагается, что опция имеет аргумент или группу аргументов, отделенных от флага пробелами или табуляциями. В переменную optarg помещается указатель на начало аргумента распознанной опции. После каждого вызова функция getopt помещает во внешнюю переменную optind индекс того элемента массива argv, который должен обрабатываться следующим. Значение переменной optind до первого обращения к функции getopt равно 1. Когда все опции обработаны (то есть встретился первый из аргументов, не входящих в состав опций), результат функции getopt равен -1. Можно использовать специальную опцию --, чтобы отметить конец опций. Когда она встретится при разборе, будет возвращено значение -1, а сама опция -- будет пропущена. ДИАГНОСТИКА ПРИМЕР Следующий фрагмент программы показывает, как можно обработать аргументы команды, допускающей взаимоисключающие опции a и b, а также опцию o, которая должна иметь аргумент: main (argc, argv) int argc; char **argv; { int c; extern char *optarg; extern int optind; ... while ((c=getopt (argc,argv,"abo:")) != -1) switch (c) { case 'a': if (bflg) errflg++; else aflg++; break; case 'b': if (aflg) errflg++; else bproc (); break; case 'o': ofile = optarg; break; case '?': errflg++; } if (errflg) { (void) fprintf (stderr, "usage: ... "); exit (2); } for ( ; optind < argc; optind++) { if (access (argv [optind], 4)) { ... } ПРЕДОСТЕРЕЖЕНИЯ cmd -aboxxx fileЗдесь нарушено правило 5: опция с аргументом не должна быть в одной группе с остальными опциями. cmd -ab -oxxx fileНарушено правило 6: после опции, которой требуется аргумент, должен быть пробел или табуляция. Изменение значения переменной optind или вызовы функции getopt с различными значениями argv могут привести к непредсказуемым результатам. СМ. ТАКЖЕ |
|