Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

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) в Справочнике пользователя.

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...