Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getopt(3C) — DG/UX 5.4.2A

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getsubopt(3C)

getopts(1)

intro(1)



getopt(3C)                       DG/UX 5.4.2                      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)].

       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 ``--'' (two hyphens) may be used to delimit the end of the
       options; when it is encountered, EOF is returned and ``--'' is
       skipped. This is useful in delimiting non-option arguments that begin
       with ``-'' (hyphen).

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 argument:

       #include <stdlib.h>
       #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)



Licensed material--property of copyright holder(s)                         1




getopt(3C)                       DG/UX 5.4.2                      getopt(3C)


                           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] [-ofile] files...\n");
                 exit (2);
            }
            for ( ; optind < argc; optind++)
                 (void)printf("%s\n", argv[optind]);
            return 0;
       }

DIAGNOSTICS
       getopt prints an error message on the standard error and returns a
       ``?''  (question mark) when it encounters an option letter not
       included in optstring or no 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.

SEE ALSO
       getsubopt(3C).
       getopts(1), intro(1).

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.

       It is a violation of the command syntax standard [see intro(1)] for
       options with arguments to be grouped with other options, as in cmd
       -aboxxx file, where a and b are options, o is an option that requires
       an argument, and xxx is the argument to o.  Although this syntax is
       permitted in the current implementation, it should not be used
       because it may not be supported in future releases.  The correct
       syntax is cmd -ab -oxxx file.

       Changing the value of the variable optind, or calling getopt with
       different values of argv, may lead to unexpected results.



Licensed material--property of copyright holder(s)                         2


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