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-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |