Книга: Linux программирование в примерах
2.3.2. GNU getopt() и порядок опций
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.1.3. Функция getopt_long()
- Appendix H. GNU Free Documentation License
- Appendix I. GNU General Public License
- 7.3. Порядок заключения, изменения, расторжения договоров
- Магическая программа, или Беспорядок по расписанию
- 1.3. Автоматизация процесса с помощью GNU-утилиты make
- Порядок создания связей
- The GNU Image Manipulation Program
- 8.5. Обход дерева файлов: GNU du
- GNU Emacs and the Free Software Foundation
- Проект GNU и Фонд свободного ПО
- 2.1.2. Соглашения по работе с командной строкой в GNU