getopt - get option character from command line argument list
Lb libc
The option string
Fa optstring
may contain the following elements: individual characters, and
characters followed by a colon to indicate an option argument
is to follow.
For example, an option string
x
recognizes an option
``-x
''
and an option string
x:
recognizes an option and argument
``-x argument
''
It does not matter to
getopt ();
if a following argument has leading white space.
On return from
getopt (,);
optarg
points to an option argument, if it is anticipated,
and the variable
optind
contains the index to the next
Fa argv
argument for a subsequent call
to
getopt (.);
The variable
optopt
saves the last
known
option character returned by
getopt (.);
The variables
opterr
and
optind
are both initialized to 1.
The
optind
variable may be set to another value before a set of calls to
getopt ();
in order to skip over more or less argv entries.
In order to use
getopt ();
to evaluate multiple sets of arguments, or to evaluate a single set of
arguments multiple times,
the variable
optreset
must be set to 1 before the second and each additional set of calls to
getopt (,);
and the variable
optind
must be reinitialized.
The
getopt ();
function returns -1 when the argument list is exhausted.
The interpretation of options in the argument list may be cancelled
by the option
`--'
(double dash) which causes
getopt ();
to signal the end of argument processing and return -1.
When all options have been processed (i.e., up to the first non-option
argument),
getopt ();
returns -1.
#include <unistd.h>
int bflag, ch, fd;
bflag = 0;
while ((ch = getopt(argc, argv, "bf:")) != -1) {
switch (ch) {
case 'b':
bflag = 1;
break;
case 'f':
if ((fd = open(optarg, O_RDONLY, 0)) Lt] 0) {
(void)fprintf(stderr,
"myname: %s: %s\n", optarg, strerror(errno));
exit(1);
}
break;
case '?':
default:
usage();
}
}
argc -= optind;
argv += optind;
Option arguments are allowed to begin with ``- '' this is reasonable but reduces the amount of error checking possible.
A single dash
``-
''
may be specified as a character in
Fa optstring ,
however it should
never
have an argument associated with it.
This allows
getopt ();
to be used with programs that expect
``-
''
as an option flag.
This practice is wrong, and should not be used in any current development.
It is provided for backward compatibility
only
Care should be taken not to use
`-'
as the first character in
Fa optstring
to avoid a semantic conflict with
GNU
getopt (,);
which assigns different meaning to an
Fa optstring
that begins with a
`-'
By default, a single dash causes
getopt ();
to return -1.
It is also possible to handle digits as option letters.
This allows
getopt ();
to be used with programs that expect a number
(``-3
''
)
as an option.
This practice is wrong, and should not be used in any current development.
It is provided for backward compatibility
only
The following code fragment works in most cases.
int ch;
long length;
char *p, *ep;
while ((ch = getopt(argc, argv, "0123456789")) != -1)
switch (ch) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
p = argv[optind - 1];
if (p[0] == '-' Am]Am] p[1] == ch Am]Am] !p[2]) {
length = ch - '0';
ep = "";
} else if (argv[optind] Am]Am] argv[optind][1] == ch) {
length = strtol((p = argv[optind] + 1),
Am]ep, 10);
optind++;
optreset = 1;
} else
usage();
if (*ep != '\0')
errx(EX_USAGE, "illegal number -- %s", p);
break;
}
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |