Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getopts(1)

intro(1)

getsubopt(3C)





   getopt(3C)          (C Programming Language Utilities)           getopt(3C)


   NAME
         getopt - get option letter from argument vector

   SYNOPSIS
         #include <stdlib.h>

         int getopt (int argc, char * const *argv, const char *optstring);

         extern char *optarg;

         extern int optind, opterr, optopt;

   DESCRIPTION
         getopt returns the next option letter in argv that matches a letter
         in optstring.  It supports all the rules of the command syntax
         standard [see intro(1)].  Since all new commands are intended to
         adhere to the command syntax standard, they should use getopts(1),
         getopt(3C), or getsubopts(3C) to parse positional parameters and
         check for options that are legal for that command.

         optstring must contain the option letters the command using getopt
         will recognize; if a letter is followed by a colon, the option is
         expected to have an argument, or group of arguments, which may be
         separated from it by white space.

         optarg is set to point to the start of the option-argument on return
         from getopt.

         getopt places in optind the argv index of the next argument to be
         processed.  optind is external and is initialized to 1 before the
         first call to getopt.

         When all options have been processed (i.e., up to the first non-
         option argument), getopt returns EOF.  The special option ``--'' may
         be used to delimit the end of the options; when it is encountered,
         EOF will be returned, and ``--'' will be skipped. This is useful in
         delimiting non-option arguments that begin with "-".

   DIAGNOSTICS
         getopt prints an error message on standard error and returns a
         question mark (?)  when it encounters an option letter not included
         in optstring or no option-argument after an option that expects one.
         This error message may be disabled by setting opterr to 0.  The value
         of the character that caused the error is in optopt.

   EXAMPLE
         The following code fragment shows how one might process the arguments
         for a command that can take the mutually exclusive options a and b,
         and the option o, which requires an option-argument:

         #include <stdlib.h>


   7/91                                                                 Page 1









   getopt(3C)          (C Programming Language Utilities)           getopt(3C)


         #include <stdio.h>

         main (int argc, char **argv)
         {
               int c;
               extern char *optarg;
               extern int optind;
               int aflg = 0;
               int bflg = 0;
               int errflg = 0;
               char *ofile = NULL;

               while ((c = getopt(argc, argv, "abo:")) != EOF)
                     switch (c) {
                     case 'a':
                           if (bflg)
                                 errflg++;
                           else
                                 aflg++;
                           break;
                     case 'b':
                           if (aflg)
                                 errflg++;
                           else
                                 bflg++;
                           break;
                     case 'o':
                           ofile = optarg;
                           (void)printf("ofile = %s\n", ofile);
                           break;
                     case '?':
                           errflg++;
                     }
               if (errflg) {
                     (void)fprintf(stderr, "usage: cmd [-a|-b] [-o<file>] files...\n");
                     exit (2);
               }
               for ( ; optind < argc; optind++)
                     (void)printf("%s\n", argv[optind]);
               return 0;
         }

   NOTES
         The library routine getopt does not fully check for mandatory
         arguments. That is, given an option string "a:b" and the input "-a
         -b", getopt assumes that "-b" is the mandatory argument to the option
         "-a" and not that -a is missing a mandatory argument.

         Although the following command syntax rule [see intro(1)] relaxation
         is permitted under the current implementation, they should not be
         used because they may not be supported in future releases of the


   Page 2                                                                 7/91









   getopt(3C)          (C Programming Language Utilities)           getopt(3C)


         system.  As in the EXAMPLE section above, a and b are options, o is
         an option which requires an option-argument, and xxx is the option-
         argument to o.

         cmd -aboxxx file  (Violation:  options with
               option-arguments must not be grouped with other options)

   SEE ALSO
         getopts(1), intro(1) in the User's Reference Manual.
         getsubopt(3C).











































   7/91                                                                 Page 3





Typewritten Software • bear@typewritten.org • Edmonds, WA 98026