GNU C Library (libc) Programming Guide - Suboptions Example


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;
 }

Published under the terms of the GNU General Public License Design by Interspire

AltStyle によって変換されたページ (->オリジナル) /