Linux программирование в примерах - Роббинс Арнольд
Тут можно читать бесплатно Linux программирование в примерах - Роббинс Арнольд. Жанр: Интернет издательство , год .
Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте knigi-for.me (knigi for me) или прочесть краткое содержание, предисловие (аннотацию),
описание и ознакомиться с отзывами (комментариями) о произведении.
Таблица 2.1. Значения для
has_arg
Макроподстановка | Числовое значение | Смысл |
---|---|---|
no_argument | 0 | Опция не принимает аргумент |
required_argument | 1 | Опции требуется аргумент |
optional_argument | 2 | Аргумент опции является необязательным |
У каждой длинной опции есть один такой элемент с соответствующими заполненными значениями. В последнем элементе массива все значения должны быть равны нулю. Нет необходимости сортировать массив:
getopt_long()
При первой встрече использование
flag
val
while ((с = getopt(argc, argv, ":af:hv")) != -1) {
switch (с) {
case 'a':
do_all = 1;
break;
case 'f':
myfile = optarg;
break;
case 'h':
do_help = 1;
break;
case 'v':
do_verbose = 1;
break;
... /* Здесь обработка ошибок */
}
}
Когда
flag
getopt_long()
case
switch
int do_all, do_help, do_verbose; /* флаговые переменные */
char *my_file;
struct option longopts[] = {
{ "all", no_argument, &do_all, 1 },
{ "file", required_argument, NULL, 'f' },
{ "help", no_argument, &do_help, 1 },
{ "verbose", no_argument, &do_verbose, 1 },
{ 0, 0, 0, 0 }
};
while ((с =
getopt_long(argc, argv, ":f:", longopts, NULL)) != -1) {
switch (c) {
case 'f':
myfile = optarg;
break;
case 0:
/* getopt_long() устанавливает значение переменной,
просто продолжить выполнение */
break;
... /* Здесь обработка ошибок */
}
}
Обратите внимание, что значение, переданное аргументу
optstring
a
h
v
switch
case
На практике следует писать свои программы так, чтобы у каждой короткой опции была также соответствующая длинная опция. В этом случае проще всего установить в
flag
val
2.3.3.2. Длинные опции в стиле POSIX
Стандарт POSIX резервирует опцию
-W
-W
Если за
W
optstring
getopt_long()
-Wlongopt
--longopt
while ((с =
getopt_long(argc, argv, ":f:W;", longopts, NULL)) != -1) {
С этим изменением
-Wall
--all
-Wfile=myfile
--file=myfile
-W
gawk
2.3.3 3. Сводка возвращаемых значений
getopt_long()
Теперь должно быть ясно, что
getopt_long()
Таблица 2.2. Возвращаемые значения
getopt_long()
Возвращаемый код | Значение |
---|---|
0 | getopt_long() |
1 | optarg |
'?' | Недействительная опция |
' ' | Отсутствующий аргумент опции |
'x' | Символ опции 'x' |
-1 | Конец опций |