Linux программирование в примерах | страница 36
>no_newline
для опции >-n
echo.2.3.2. GNU >getopt()
и порядок опций
Стандартная функция >getopt()
прекращает поиск опций, как только встречает аргумент командной строки, который не начинается с GNU >getopt()
отличается: она просматривает в поисках опций всю командную строку. По мере продвижения она переставляет элементы >argv
, так что после ее завершения все опции оказываются переставленными в начало, и код, продолжающий разбирать аргументы с >argv[optind]
до >argv[argc-1]
, работает правильно. Во всех случаях специальный аргумент '>--
' завершает сканирование опций.
Вы можете изменить поведение по умолчанию, использовав в >optstring
специальный первый символ следующим образом:
>optstring[0] == '+'
GNU >getopt()
ведет себя, как стандартная >getopt()
; она возвращает опции по мере их обнаружения, останавливаясь на первом аргументе, не являющемся опцией. Это работает также в том случае, если в окружении присутствует строка >POSIXLY_CORRECT
.
>optstring[0] == '-'
GNU >getopt()
возвращает каждый аргумент командной строки независимо от того, представляет он аргумент или нет. В этом случае для каждого такого аргумента функция возвращает целое 1, а указатель на соответствующую строку помещает в >optarg
.
Как и для стандартной >getopt()
, если первым символом >optstring
является '>:
', GNU >getopt()
различает «неверную опцию» и «отсутствующий аргумент опции», возвращая соответственно '>?
' или '>:
'. Символ '>:
' в >optstring
может быть вторым символом, если первым символом является '>+
' или '>-
'.
Наконец, если за символом опции в >optstring
следуют два двоеточия, эта опция может иметь необязательный аргумент. (Быстро повторите это три раза!) Такой аргумент считается присутствующим, если он находится в том же элементе >argv
, что и сама опция, и отсутствующим в противном случае. В случае отсутствия аргумента GNU >getopt()
возвращает символ опции, а в >optarg
записывает NULL. Например, пусть имеем:
>while ((с = getopt(argc, argv, "ab::")) != -1)
>...
для >-bYANKEES
, возвращаемое значение будет '>b
', a >optarg
указывает на «>YANKEES
», тогда как для >-b
или '>-b YANKEES
' возвращаемое значение будет все то же '>b
', но в >optarg
будет помещен NULL. В последнем случае «>YANKEES
» представляет отдельный аргумент командной строки.
2.3.3. Длинные опции
Функция >getopt_long()