getsubopt(3c) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

getsubopt(3c)

getsubopt(3C)            Standard C Library Functions            getsubopt(3C)

NAME
       getsubopt - parse suboption arguments from a string

SYNOPSIS
       #include <stdlib.h>

       int getsubopt(char **optionp, char * const *keylistp, char **valuep);

DESCRIPTION
       The getsubopt() function parses suboption arguments in a flag argument.
       Such options often result from the use of getopt(3C).


       These  suboptions  are  separated by commas and may consist of either a
       single token, or a token-value pair separated by an equal  sign.  Since
       commas  delimit suboptions in the option string they are not allowed to
       be part of the suboption or the value of a suboption. An  example  com‐
       mand  that  uses  this  syntax  is mount(8) which allows you to specify
       mount parameters with the -o flag. For example:

         % mount -o rw,hard,bg,wsize=1024 speed:/data /data



       In this example there are four  suboptions:  'rw',  'hard',  'bg',  and
       'wsize', the last of which has an associated value of 1024.


       The  getsubopt()  argument optionp is a pointer to a pointer to the op‐
       tion argument string. The suboption arguments are separated  by  commas
       and  each  can  consist  of either a single token or a token-value pair
       separated by an equal sign.


       The keylistp argument is a pointer to a vector of strings. The  end  of
       the vector is identified by a null pointer. Each entry in the vector is
       one  of the possible tokens that might be found in *optionp. Since com‐
       mas delimit suboption arguments in optionp, they should not  appear  in
       any  of the strings pointed to by keylistp. Similarly, because an equal
       sign separates a token from its value, the application should  not  in‐
       clude an equal sign in any of the strings pointed to by keylistp.


       The valuep argument is the address of a value string pointer.


       If a comma appears in optionp, it is interpreted as a suboption separa‐
       tor.  After  commas have been processed, if there are one or more equal
       signs in a suboption string, the first  equal  sign  in  any  suboption
       string  is interpreted as a separator between a token and a value. Sub‐
       sequent equal signs in a suboption string are interpreted  as  part  of
       the value.


       If the string at *optionp contains only one suboption argument (equiva‐
       lently,  no  commas), getsubopt() updates *optionp to point to the null
       character at the end of the string. Otherwise, it isolates  the  subop‐
       tion  argument  by  replacing the comma separator with a null character
       and updates *optionp to point to the start of the next suboption  argu‐
       ment.  If the suboption argument has an associated value (equivalently,
       contains an equal sign), getsubopt() updates *valuep to  point  to  the
       value's  first character. Otherwise, it sets *valuep to a null pointer.
       The calling application can use this information to  determine  whether
       the presence or absence of a value for the suboption is an error.


       Additionally,  when getsubopt() fails to match the suboption with a to‐
       ken in the keylistp array, the calling  application  should  decide  if
       this  is  an error or if the unrecognized option should be processed in
       another way.

RETURN VALUES
       The getsubopt() function returns the index of the matched token  string
       or -1 if no token strings were matched.

ERRORS
       No errors are defined.

EXAMPLES
       Example 1 Use getsubopt() to process options.



       The  following  example  demonstrates  the processing of options to the
       mount(8) utility using getsubopt().


         #include <stdlib.h>

         char *myopts[] = {
         #define READONLY     0
                     "ro",
         #define READWRITE    1
                     "rw",
         #define WRITESIZE    2
                     "wsize",
         #define READSIZE     3
                     "rsize",
                     NULL};

         int
         main(int argc, char **argv)
         {
             int sc, c, errflag;
             char *options, *value;
             extern char *optarg;
             extern int optind;
             .
             .
             .
             while((c = getopt(argc, argv, "abf:o:")) != -1) {
                 switch (c) {
                 case 'a': /* process a option */
                     break;
                 case 'b': /* process b option */
                     break;
                 case 'f':
                     ofile = optarg;
                     break;
                 case '?':
                     errflag++;
                     break;
                 case 'o':
                     options = optarg;
                     while (*options != '\0') {
                         switch (getsubopt(&options, myopts, &value)) {
                         case READONLY:  /* process ro option */
                             break;
                         case READWRITE: /* process rw option */
                             break;
                         case WRITESIZE: /* process wsize option */
                             if (value == NULL) {
                                 error_no_arg();
                                 errflag++;
                             } else
                                 write_size = atoi(value);
                             break;
                         case READSIZE:  /* process rsize option */
                             if (value == NULL) {
                                 error_no_arg();
                                 errflag++;
                             } else
                                 read_size = atoi(value);
                             break;
                         default:
                             /* process unknown token */
                             error_bad_token(value);
                             errflag++;
                             break;
                         }
                     }
                     break;
                 }
             }
             if (errflag) {
                 /* print usage instructions etc. */
             }
             for (; optind < argc; optind++) {
                 /* process remaining arguments */
             }
             .
             .
             .
         }


       Example 2 Parse suboptions.



       The following example uses the getsubopt() function to  parse  a  value
       argument  in  the  optarg  external  variable  returned  by  a  call to
       getopt(3C).


         #include <stdlib.h>
         ...
         char *tokens[] = {"HOME", "PATH", "LOGNAME", (char *) NULL };
         char *value;
         int opt, index;
         while ((opt = getopt(argc, argv, "e:")) != -1) {
             switch(opt) {
             case 'e' :
                 while ((index = getsubopt(&optarg, tokens, &value)) != -1) {
                     switch(index) {
         ...
                 }
                 break;
         ...
             }
         }


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE  VALUE _ Interface StabilityCommitted _ MT-LevelMT-Safe _ Stan‐
       dardSee standards(7).


SEE ALSO
       getopt(3C), attributes(7), standards(7), mount(8)

HISTORY
       The getsubopt() function has been included in all Sun  and  Oracle  re‐
       leases of Solaris.

Oracle Solaris 11.4               27 Aug 2025                    getsubopt(3C)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3