Разобрать опции, переданные из командной строки
#include <unistd.h>int getopt( int argc,char * const argv[],const char *optstring );extern char *optarg;extern int optind, opterr, optopt;
":"
, опция имеет аргумент. Допустимые символы лишь включают буквы и цифры.libc
Функция getopt() представляет собой анализатор командной строки, который может быть использован приложениями, которые следуют "Рекомендациям по синтаксису утилит", описанным ниже.
Глобальная переменная optind хранит индекс следующего элемента массива argv[], который будет обработан. Система инициализирует optind значением 1
при загрузке программы, и getopt() обновляет ее по завершению работы с каждым элементом argv[]. Сбросьте optind в 1
если вам требуется использовать getopt() для обработки дополнительных наборов аргументов.
Функция getopt() возвращает следующий символ опции из argv, который совпадает с символом в optstring, если такой существует. Если у опции есть аргумент, getopt() записывает в optarg указатель на аргумент опции:
2
.
1
. Функция getopt() возвращает -1
и не изменяет optind, если:
NULL
Функция возвращает -1
после инкремента optind, если:
Если функция getopt() встречает символ опции, который отсутствует в optstring, она возвращает символ "?". Если функция getopt() не обнаруживает аргумент у опции, то она возвращает:
и записывает в optopt символ опции, который вызвал ошибку.
Функция getopt() выводит диагностические сообщения в stderr до тех пор, пока opterr равен 0
, или первым символом optstring является ':'.
Рекомендации по синтаксису утилит
Функция getopt() может быть использована приложениями, которые следуют следующим рекомендациям:
Если опция, не имеющая аргументов, повторяется, результаты зависят от приложения.
utility_name [-a] [-b] [-c option_argument] [-d|-e] [-foption_argument] [operand...]
Или:
utility_name [-ab] [-c option_argument] [-d|-e] [-foption_argument] [operand...]
Утилиты со сложными аргументами могут быть представлены таким образом:
utility_name [options] [operand]
Все числа в допустимом диапазоне не обязательно семантически верны. Стандартная утилита, которая принимает аргумент опции или операнд, который должен интерпретироваться как число и для которого разрешен диапазон значений, меньший, чем тот, что указан выше, описывает этот меньший диапазон вместе с описанием аргумента опции или операнда. Если возникает ошибка, диагностическое сообщение утилиты указывает, что значение выходит за пределы поддерживаемого диапазона, а не синтаксически неверно.
utility_name -f option_argument ... [operand...] utility_name [-g option_argument] ... [operand...]
указывает, что несколько вхождений опции и ее аргумента, предшествующего многоточию, являются допустимыми, с семантикой, указанной в разделе «Параметры» утилиты. В первом примере каждому аргументу опции требуется предшествующий -f и должен быть указан хотя бы один -f option_argument.
Одно из следующих:
-1
по завершению обхода всех опций командной строки #include <unistd.h>#include <stdlib.h>#include <stdio.h>int main( int argc, char* argv[] ){int c, errflag = 0;while ( (c = getopt( argc, argv, "abt:" )) != -1 ){switch( c ){case 'a': printf( "apples\n" );break;case 'b': printf( "bananas\n" );break;case 't': printf( "tree = %s\n", optarg );break;case '?': ++errflag;break;}}return (EXIT_SUCCESS);}
POSIX 1003.1
Рекомендации 3, 4, 5, 6, 7, 9 и 10 в томе «Базовые определения» IEEE Std.1003.1-2001, Раздел 12.2, Рекомендации по синтаксису утилит.
Предыдущий раздел: Описание API системной библиотеки