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