getopt(3C) COMPATIBILITY FUNCTIONS getopt(3C)
NAME
getopt - get option letter from argument vector
SYNOPSIS
#include <stdlib.h>
int getopt (int argc, char * const *argv, const char *opt-
string);
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 com-
mand 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 ``--'' (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 argu-
ment:
#include <stdlib.h>
#include <stdio.h>
main (int argc, char **argv)
{
int c;
extern char *optarg;
Last change: C Programming Language Utilities 1
getopt(3C) COMPATIBILITY FUNCTIONS getopt(3C)
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;
}
SEE ALSO
getsubopt(3C).
getopts(1), intro(1) in the User's Reference Manual.
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 dis-
abled by setting opterr to 0. The value of the character
that caused the error is in optopt.
NOTES
The library routine getopt does not fully check for manda-
tory arguments. That is, given an option string a:b and the
Last change: C Programming Language Utilities 2
getopt(3C) COMPATIBILITY FUNCTIONS getopt(3C)
input -a -b, getopt assumes that -b is the mandatory argu-
ment 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.
Last change: C Programming Language Utilities 3