(libc.info.gz) Suboptions Example

Info Catalog (libc.info.gz) Suboptions (libc.info.gz) Parsing Program Arguments
 
 25.3.13 Parsing of Suboptions Example
 -------------------------------------
 
 The code which might appear in the 'mount'(8) program is a perfect
 example of the use of 'getsubopt':
 
 
      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
 
      int do_all;
      const char *type;
      int read_size;
      int write_size;
      int read_only;
 
      enum
      {
        RO_OPTION = 0,
        RW_OPTION,
        READ_SIZE_OPTION,
        WRITE_SIZE_OPTION,
        THE_END
      };
 
      const char *mount_opts[] =
      {
        [RO_OPTION] = "ro",
        [RW_OPTION] = "rw",
        [READ_SIZE_OPTION] = "rsize",
        [WRITE_SIZE_OPTION] = "wsize",
        [THE_END] = NULL
      };
 
      int
      main (int argc, char **argv)
      {
        char *subopts, *value;
        int opt;
 
        while ((opt = getopt (argc, argv, "at:o:")) != -1)
          switch (opt)
            {
            case 'a':
              do_all = 1;
              break;
            case 't':
              type = optarg;
              break;
            case 'o':
              subopts = optarg;
              while (*subopts != '\0')
                switch (getsubopt (&subopts, mount_opts, &value))
                  {
                  case RO_OPTION:
                    read_only = 1;
                    break;
                  case RW_OPTION:
                    read_only = 0;
                    break;
                  case READ_SIZE_OPTION:
                    if (value == NULL)
                      abort ();
                    read_size = atoi (value);
                    break;
                  case WRITE_SIZE_OPTION:
                    if (value == NULL)
                      abort ();
                    write_size = atoi (value);
                    break;
                  default:
                    /* Unknown suboption. */
                    printf ("Unknown suboption `%s'\n", value);
                    break;
                  }
              break;
            default:
              abort ();
            }
 
        /* Do the real work. */
 
        return 0;
      }
 
Info Catalog (libc.info.gz) Suboptions (libc.info.gz) Parsing Program Arguments
automatically generated by info2html