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