150 lines
2.8 KiB
Groff
150 lines
2.8 KiB
Groff
.\" Copyright (c) 1985 Regents of the University of California.
|
|
.\" All rights reserved. The Berkeley software License Agreement
|
|
.\" specifies the terms and conditions for redistribution.
|
|
.\"
|
|
.\" @(#)getopt.3 6.4 (Berkeley) 5/27/86
|
|
.\"
|
|
.TH GETOPT 3 "May 27, 1986"
|
|
.UC 6
|
|
.SH NAME
|
|
getopt \- get option letter from argv
|
|
.SH SYNOPSIS
|
|
.ft B
|
|
int getopt(argc, argv, optstring)
|
|
.br
|
|
int argc;
|
|
.br
|
|
char **argv;
|
|
.br
|
|
char *optstring;
|
|
.sp
|
|
extern char *optarg;
|
|
.br
|
|
extern int optind;
|
|
.ft
|
|
.SH DESCRIPTION
|
|
.I Getopt
|
|
returns the next option letter in
|
|
.I argv
|
|
that matches a letter in
|
|
.IR optstring .
|
|
.I Optstring
|
|
is a string of recognized option letters;
|
|
if a letter is followed by a colon, the option is expected to have
|
|
an argument that may or may not be separated from it by white space.
|
|
.I Optarg
|
|
is set to point to the start of the option argument on return from
|
|
.IR getopt .
|
|
.PP
|
|
.I Getopt
|
|
places in
|
|
.I optind
|
|
the
|
|
.I argv
|
|
index of the next argument to be processed.
|
|
Because
|
|
.I optind
|
|
is external, it is normally initialized to zero automatically
|
|
before the first call to
|
|
.IR getopt .
|
|
.PP
|
|
When all options have been processed (i.e., up to the first
|
|
non-option argument),
|
|
.I getopt
|
|
returns
|
|
.BR EOF .
|
|
The special option
|
|
.B \-\-
|
|
may be used to delimit the end of the options;
|
|
.B EOF
|
|
will be returned, and
|
|
.B \-\-
|
|
will be skipped.
|
|
.SH DIAGNOSTICS
|
|
.I Getopt
|
|
prints an error message on
|
|
.I stderr
|
|
and returns a question mark
|
|
.RB ( ? )
|
|
when it encounters an option letter not included in
|
|
.IR optstring .
|
|
.SH EXAMPLE
|
|
The following code fragment shows how one might process the arguments
|
|
for a command that can take the mutually exclusive options
|
|
.B a
|
|
and
|
|
.BR b ,
|
|
and the options
|
|
.B f
|
|
and
|
|
.BR o ,
|
|
both of which require arguments:
|
|
.PP
|
|
.RS
|
|
.nf
|
|
main(argc, argv)
|
|
int argc;
|
|
char **argv;
|
|
{
|
|
int c;
|
|
extern int optind;
|
|
extern char *optarg;
|
|
\&.
|
|
\&.
|
|
\&.
|
|
while ((c = getopt(argc, argv, "abf:o:")) != EOF)
|
|
switch (c) {
|
|
case `a':
|
|
if (bflg)
|
|
errflg++;
|
|
else
|
|
aflg++;
|
|
break;
|
|
case `b':
|
|
if (aflg)
|
|
errflg++;
|
|
else
|
|
bproc();
|
|
break;
|
|
case `f':
|
|
ifile = optarg;
|
|
break;
|
|
case `o':
|
|
ofile = optarg;
|
|
break;
|
|
case `?':
|
|
default:
|
|
errflg++;
|
|
break;
|
|
}
|
|
if (errflg) {
|
|
fprintf(stderr, "Usage: ...");
|
|
exit(2);
|
|
}
|
|
for (; optind < argc; optind++) {
|
|
\&.
|
|
\&.
|
|
\&.
|
|
}
|
|
\&.
|
|
\&.
|
|
\&.
|
|
}
|
|
.RE
|
|
.SH HISTORY
|
|
Written by Henry Spencer, working from a Bell Labs manual page.
|
|
Modified by Keith Bostic to behave more like the System V version.
|
|
.SH BUGS
|
|
It is not obvious how
|
|
`\-'
|
|
standing alone should be treated; this version treats it as
|
|
a non-option argument, which is not always right.
|
|
.PP
|
|
Option arguments are allowed to begin with `\-';
|
|
this is reasonable but reduces the amount of error checking possible.
|
|
.PP
|
|
.I Getopt
|
|
is quite flexible but the obvious price must be paid: there is much
|
|
it could do that it doesn't, like
|
|
checking mutually exclusive options, checking type of
|
|
option arguments, etc.
|