[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Использование getopt(3C) в программе

6    Создание строки допустимых опций. Опции, за которыми следует
двоеточие ":", требуют соответствующих параметров.
7    Объявление флагов необязательных опций.
10   Печать числа входных параметров.
11   Вход в цикл вызова getopt(3C) для просмотра командной строки,
возвращается одна опция за один проход  цикла.
12   Вход в выбор switch для обработки опций. Обычно флаг
устанавливается для указания присутствия конкретной опции. Флаг
используется в программе позже.
16,20     Если опции нужен параметр, тогда переменная optarg будет
содержать адрес этого параметра. Если этот адрес будет использоваться
позже, то он должен быть сохранен в символьном указателе.
24,25     Если обнаружена недопустимая опция, getopt(3C) вернет '?' и
выдаст сообщение об ошибке на стандартный вывод диагностики. Выдача
сообщения может быть выключена установкой opterr в ноль. getopt
содержит значение недопустимой опции.
35-37     Когда getopt(3) возвращает -1, тогда argv[optind] указывает
на первый аргумент командной строки, отличный от опции.
Файл: getopt_ex.c
$ getopt_ex -db -f abc -c -g hij -d file1 file2
   1 argc equals 10
   2 getopt_ex: illegal option -- b
   3 invalid option is b
   4 getopt_ex: illegal option -- c
   5 invalid option is c
   6 dflg equals 2
   7 f_ptr points to abc
   8 g_ptr points to hij
   9 invalid equals 2
  10 optind equals 8
  11 next parameter = file1

                 ИСПОЛЬЗОВАНИЕ getopt(3C) В ПРОГРАММЕ
 1 #include <stdlib.h>
 2 #include <stdio.h>
 3
 4 main(int argc, char *argv[])
 5 {
 6     char options[ ] = "f:dg:";  /* valid options */
 7     int c, invalid = 0, dflg = 0, fflg = 0, gflg = 0;
 8     char *f_ptr, *g_ptr;
 9
10     printf("argc equals %d\n", argc);
11     while ((c = getopt(argc, argv, options)) != EOF) {
12      switch (c) {
13      case 'd':
14          dflg++;
15          break;
16      case 'f':
17          fflg++;
18          f_ptr = optarg;
19          break;
20      case 'g':
21          gflg++;
22          g_ptr = optarg;
23          break;
24      case '?':
25          printf("invalid option is %c\n", optopt);
26          invalid++;
27      }
28     }
29     printf("dflg equals %d\n", dflg);
30     if(fflg)
31      printf("f_ptr points to %s\n", f_ptr);
32     if(gflg)
33      printf("g_ptr points to %s\n", g_ptr);
34     printf("invalid equals %d\n", invalid);
35     printf("optind equals %d\n", optind);
36     if(optind < argc)
37      printf("next parameter = %s\n", argv[optind]);
38 }