Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
Таблица 2.1. Значения для
has_arg| Макроподстановка | Числовое значение | Смысл |
|---|---|---|
no_argument | 0 | Опция не принимает аргумент |
required_argument | 1 | Опции требуется аргумент |
optional_argument | 2 | Аргумент опции является необязательным |
У каждой длинной опции есть один такой элемент с соответствующими заполненными значениями. В последнем элементе массива все значения должны быть равны нулю. Нет необходимости сортировать массив:
getopt_long()При первой встрече использование
flagvalwhile ((с = 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; ... /* Здесь обработка ошибок */ }}Когда
flaggetopt_long()caseswitchint 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; ... /* Здесь обработка ошибок */ }}Обратите внимание, что значение, переданное аргументу
optstringahvswitchcaseНа практике следует писать свои программы так, чтобы у каждой короткой опции была также соответствующая длинная опция. В этом случае проще всего установить в
flagval2.3.3.2. Длинные опции в стиле POSIX
Стандарт POSIX резервирует опцию
-W-WЕсли за
Woptstringgetopt_long()-Wlongopt--longoptwhile ((с = getopt_long(argc, argv, ":f:W;", longopts, NULL)) != -1) {С этим изменением
-Wall--all-Wfile=myfile--file=myfile-Wgawk2.3.3 3. Сводка возвращаемых значений
getopt_long()Теперь должно быть ясно, что
getopt_long()Таблица 2.2. Возвращаемые значения
getopt_long()| Возвращаемый код | Значение |
|---|---|
| 0 | getopt_long() |
| 1 | optarg |
| '?' | Недействительная опция |
| ' ' | Отсутствующий аргумент опции |
| 'x' | Символ опции 'x' |
| -1 | Конец опций |