Linux программирование в примерах - Страница 14
Изменить размер шрифта:
Для использования
getopt()
while
-1
optarg
-а
-b
int ос; /* символ опции */
char *b_opt_arg;
while ((ос = getopt(argc, argv, "ab:")) != -1) {
switch (oc) {
case 'a':
/* обработка -а, установить соответствующий флаг */
break;
case 'b':
/* обработка -b, получить значение аргумента из optarg */
b_opt_arg = optarg;
break;
case ':':
... /* обработка ошибок, см. текст */
case '?':
default:
... /* обработка ошибок, см. текст */
}
}
В ходе работы
getopt()
char *optarg
Аргумент для опции, если она принимает аргумент.
int optind
Текущий индекс в
argv
loop
argv[optind]
argv[argc-1]
argv [argc] ==NULL
int opterr
Когда эта переменная не равна нулю (значение по умолчанию),
getopt()
int optopt
Когда находится недействительный символ опции,
getopt()
?
:
optopt
Люди есть люди, программы неизбежно будут иногда вызываться неправильно либо с недействительной опцией, либо с отсутствующим аргументом опции. Обычно в таких случаях
getopt()
?
Во-первых, записав 0 в
opterr
getopt()
getopt()
Во-вторых, если первый символ в
optstring
getopt()
Неверная опция
getopt()
?
optopt
Отсутствует аргумент опции
getopt()
:
optstring
getopt()
?
Таким образом, помещение в качестве первого символа
optstring
getopt()
int ос; /* символ опции */
char *b_opt_arg;
while ((ос = getopt(argc, argv, ":ab:")) != -1) {
switch (oc) {
case 'a':
/* обработка -a, установка соответствующего флага */
break;
case 'b':
/* обработка -b, получение значения аргумента из optarg */
b_opt_arg = optarg;
break;
case ':':
/* отсутствует аргумент опции */
fprintf(stderr, "%s: option '-%c' requires an argumentn",
argv[0], optopt);
break;
case '?':
default:
/* недействительная опция */
fprintf(stderr, "%s: option '-%c' is invalid: ignoredn",
argv[0], optopt);
break;
}
}
Замечание о соглашениях по именованию флагов или опций: в большом количестве кода для Unix используются имена в виде
xflg
nflg
echo
xflag
no_newline
-n
2.3.2. GNU
getopt()
Стандартная функция
getopt()
getopt()
argv
argv[optind]
argv[argc-1]
--