mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

GETOPT(3C)                                           GETOPT(3C)

НАЗВАНИЕ 
	getopt - разбор опций команды

СИНТАКСИС 
        int getopt (argc, argv, optstring)
        int argc;
        char **argv, *optstring;
        
        extern char *optarg;
        extern int optind, opterr;

ОПИСАНИЕ 
	Функция getopt возвращает  очередной  флаг  из  массива
	argv,   соответствующий   какой-либо  букве  в  цепочке
	optstring.  Функция  getopt  поддерживает  все  правила
	стандартного  синтаксиса  команд [см. intro(1), правила
	3 10]. Чтобы новые команды следовали этим правилам, для
	разбора позиционных параметров и проверки  допустимости
	опций  следует использовать утилиту getopts(1) или опи-
	сываемую функцию getopt.

	Цепочка optstring должна содержать флаги, которые будут
	распознаваться программой, использующей getopt. Если за
	флагом следует двоеточие, то предполагается, что  опция
	имеет  аргумент  или  группу  аргументов, отделенных от
	флага пробелами или табуляциями.

	В  переменную optarg помещается указатель на начало ар-
	гумента распознанной опции.

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

	Когда все опции обработаны (то есть  встретился  первый
	из  аргументов,  не входящих в состав опций), результат
	функции getopt равен -1. Можно использовать специальную
	опцию --, чтобы отметить конец опций. Когда она  встре-
	тится при разборе, будет возвращено значение -1, а сама
	опция -- будет пропущена.

ДИАГНОСТИКА 
	Функция getopt выдает сообщение об ошибке в стандартный
	протокол и  возвращает  вопросительный  знак  ?,  когда
	встречается  флаг, не входящий в цепочку optstring, или
	не оказывается аргумента у опции,  требующей  аргумент.
	Выдача  сообщения  об  ошибке может быть подавлено, для
	чего переменной opterr следует присвоить 0.

ПРИМЕР 
	Следующий фрагмент программы показывает, как можно  об-
	работать аргументы команды, допускающей взаимоисключаю-
	щие  опции 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)) {
	         ...
	     }

ПРЕДОСТЕРЕЖЕНИЯ 
	Хотя текущая реализация функции getopt допускает  неко-
	торые  отступления от правил, задающих синтаксис команд
	[см. intro(1)], этим не следует пользоваться,  так  как
	подобные  возможности могут не поддерживаться в следую-
	щих версиях системы. Пусть, как и в ПРИМЕРЕ, a  и  b  -
	опции  без  аргументов,  а  опции o требуется аргумент.
	Рассмотрим два типичных отступления от правил:

	     cmd  -aboxxx file

	Здесь нарушено правило 5: опция с аргументом не  должна
	быть в одной группе с остальными опциями.

	     cmd  -ab -oxxx file

	Нарушено правило 6: после опции, которой требуется  ар-
	гумент, должен быть пробел или табуляция.

	Изменение значения переменной optind или вызовы функции
	getopt с различными значениями argv  могут  привести  к
	непредсказуемым результатам.

СМ. ТАКЖЕ 
	getopts(1), intro(1) в Справочнике пользователя.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк