getopt(3C) getopt(3C)
NAME
getopt(), optarg, optind, opterr - 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 (starting from
argv[1]) that matches a letter in optstring. argc and argv are the
argument count and argument array as passed to main(). optstring is a
string of recognized option characters; if a character is followed by
a colon, the option takes an argument which may or may not be
separated from it by white space.
optind is the index of the next element of the argv[] vector to be
processed. It is initialized to 1 by the system, and getopt() updates
it when it finishes with each element of argv[].
getopt() returns the next option character from argv that matches a
character in optstring, if there is one that matches. If the option
takes an argument, getopt() sets the variable optarg to point to the
option-argument as follows:
+ If the option was the last character in the string pointed to
by an element of argv, then optarg contains the next element
of argv, and optind is incremented by 2. If the resulting
value of optind is greater than or equal to argc, this
indicates a missing option argument, and getopt() returns an
error indication.
+ Otherwise, optarg points to the string following the option
character in that element of argv, and optind is incremented
by 1.
If, when getopt() is called, argv[optind] is NULL, or the string
pointed to by argv[optind] either does not begin with the character -
or consists only of the character -, getopt() returns -1 without
changing optind. If argv[optind] points to the string --, getopt()
returns -1 after incrementing optind.
If getopt() encounters an option character that is not contained in
optstring, it returns the question-mark (?) character. If it detects
a missing option argument, it returns the colon character (:) if the
first character of optstring was a colon, or a question-mark character
Hewlett-Packard Company - 1 - HP-UX Release 10.20: July 1996
getopt(3C) getopt(3C)
otherwise. In either case, getopt() sets the variable optopt to the
option character that caused the error. If the application has not
set the variable opterr to zero and the first character of optstring
is not a colon, getopt() also prints a diagnostic message to standard
error.
The special option -- can be used to delimit the end of the options;
-1 is returned, and -- is skipped.
RETURN VALUE
getopt() returns the next option character specified on the command
line. A colon (:) is returned if getopt() detects a missing argument
and the first character of optstring was a colon (:).
A question-mark (?) is returned if getopt() encounters an option
character not in optstring or detects a missing argument and the first
character of optstring was not a colon (:).
Otherwise, getopt() returns -1 when all command line options have been
parsed.
EXTERNAL INFLUENCES
Locale
The LC_CTYPE category determines the interpretation of option letters
as single and/or multi-byte characters.
International Code Set Support
Single- and multibyte character code sets are supported.
ERRORS
getopt() fails under the following conditions:
[EILSEQ] An invalid multibyte character sequence was encountered
during option processing.
EXAMPLES
The following code fragment shows to process arguments for a command
that can take the mutually exclusive options a and b, and the options
f and o, both of which require arguments:
#include <stdio.h>
#include <unistd.h>
main (int argc, char *argv[])
{
int c;
int bflg, aflg, errflg;
extern char *optarg;
extern int optind, optopt;
.
.
.
Hewlett-Packard Company - 2 - HP-UX Release 10.20: July 1996
getopt(3C) getopt(3C)
while ((c = getopt(argc, argv, ":abf:o:")) != -1)
switch (c) {
case 'a':
if (bflg)
errflg++;
else
aflg++;
break;
case 'b':
if (aflg)
errflg++;
else {
bflg++;
bproc( );
}
break;
case 'f':
ifile = optarg;
break;
case 'o':
ofile = optarg;
break;
case ':': /* -f or -o without arguments */
fprintf(stderr, "Option -%c requires an argument\n",
optopt);
errflg++;
break;
case '?':
fprintf(stderr, "Unrecognized option: - %c\n",
optopt);
errflg++;
}
if (errflg) {
fprintf(stderr, "usage: . . . ");
exit (2);
}
for ( ; optind < argc; optind++) {
if (access(argv[optind], 4)) {
.
.
.
}
WARNINGS
Options can be any ASCII characters except colon (:), question mark
(?), or null (\0). It is impossible to distinguish between a ? used
as a legal option, and the character that getopt() returns when it
encounters an invalid option character in the input.
getopt() is unsafe in multi-thread applications.
Hewlett-Packard Company - 3 - HP-UX Release 10.20: July 1996
getopt(3C) getopt(3C)
SEE ALSO
getopt(1).
STANDARDS CONFORMANCE
getopt(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2
optarg: AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2
opterr: AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2
optind: AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2
optopt: AES, SVID3, XPG4, POSIX.2
Hewlett-Packard Company - 4 - HP-UX Release 10.20: July 1996