Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getopt(3C) — DG/UX R4.11MU05

Media Vault

Software Library

Restoration Projects

Artifacts Sought



getopt(3C)                     DG/UX R4.11MU05                    getopt(3C)


NAME
       getopt - get option letter from argument vector

SYNOPSIS
       #include <unistd.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 getsubopt(3C) to parse positional parameters and check
       for options that are legal for that command.

       optstring must contain the option letters that 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 (that is,
       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).

   Files
       /usr/lib/locale/locale/LCMESSAGES/uxlibc
              language-specific message file [See LANG on environ(5).]

   Errors
       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
       message is printed in the standard error format.  The value of the
       character that caused the error is in optopt.

       The label defined by a call to setlabel(3C) will be used if
       available; otherwise the name of the utility (argv[0]) will be used.

USAGE
       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 <unistd.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)
                                  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;
              }

   Considerations for Threads Programming
                     +---------+-----------------------------+
                     |         |                      async- |
                     |function | reentrant   cancel   cancel |
                     |         |             point     safe  |
                     +---------+-----------------------------+
                     |getopt   |     N         -        -    |
                     +---------+-----------------------------+
REFERENCES
       getopts(1), intro(1), reentrant(3), getsubopt(3C), pfmt(3C),
       setlabel(3C)

NOTICES
       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 -o xxx 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)

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