getopt [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume I
getopt
Command option parsing.
Syntax
#include <unistd.h>
extern char *optarg;
extern int optind, opterr, optopt;
int getopt(int argc, const char *argv[],
const char *optstring);
Parameters
argc is the argument count as passed to main().
argv[] is the argument vector as passed to main().
optstring is a string containing letters and/or digits which should be
recognized as command line arguments. For example, if a
program takes the arguments -a, -A, and -b, optstring could be
"aAb". The characters in optstring may be in any order. If
an option may take an argument, the option character in
optstring should be followed by a colon. For example, if the
example command also takes an option
-c value
optstring could be "aAbc:". A colon as the first character of
optstring returns a : (instead of a ?) if getopt encounters
a missing argument.
Return Values
-1 When it reaches the end of the options. This can be when
argv[optind] is NULL or the strings - or--, or when a command
line argument does not begin with -. If argv[optind] is--,
getopt() increments optind by 1; otherwise, it does not
increment optind.
? If getopt() encounters an invalid option (one whose character
does not appear in optstring) or an option that was supposed
to be followed by an argument value but was not, getopt()
returns a question mark (?). If the first character is a :,
and the error is a missing argument, then : is returned
instead of ?. The character that caused the error is assigned
to the variable optopt, and optind is not updated.
1 Normally, getopt() writes an error message to the standard
error stream if it encounters an error; to disable this error
message, assign the value zero to the variable opterr or start
the optstring with :. By default, opterr is initialized to 1.
Description
getopt() helps parse a command line that corresponds to the standard
POSIX.2 syntax: options are single letters or digits marked with a minus
(-) and possibly followed by a value. getopt() recognizes that options
may be concatenated; for example,
-a -b
can be combined into
-ab
getopt() returns the character that represents the option. For example,
if getopt() identifies the -a option, it returns 'a'.
Successive calls to getopt() obtain successive options from the command
line. getopt() uses the variable optind to keep track of which argv
element it examines . optind is initialized to 1, and every invocation
of getopt() sets optind to the command line argument to be scanned. When
a single argument contains several options (as in -abc), optind indicates
the same argv element until all the options have been returned.
If an option takes an argument, getopt() sets optarg to point to the
associated argument, according to these rules:
*If the option character was at the end of an argv element, the
associated argument is assumed to be the element of argv. In this case,
optind is incremented by 2; otherwise, the argument value is assumed to
come immediately after the argument letter. It is the rest of the argv
element. In this case, optind is incremented by 1.
Example
The following code fragment shows how one might process the arguments for
a utility that can take the mutually exclusive options a and b and the
options f and o, both of which require arguments.
#include <unistd.h>
int main (int argc, char *argv[])
{
int c, bflg, aflg, errflg = 0;
char *ifile, *ofile;
extern char *optarg;
extern int optind, optopt;
. . .
while ((c = getopt(argc, argv, ":abf:o:")) != -1) {
switch (c) {
case 'a':
if (bflg)
errflg = 1;
else
aflg = 1;
break;
case 'b':
if (aflg)
errflg = 1;
else
bflg = 1;
bproc( );
break;
case 'f':
ifile = optarg;
break;
case 'o':
ofile = optarg;
break;
case ':': /* -f or -o without option-arg */
fprintf (stderr,
"Option -%c requires an option-argument0,
optopt);
errflg = 1;
break;
case '?':
fprintf (stderr,
"Unrecognized option: -%c0, optopt);
errflg = 1;
break;
}
}
if (errflg) {
fprintf(stderr, "usage: . . . ");
exit(2);
}
for ( ; optind < argc; optind++) {
if (access(argv[optind], R_OK)) {
. . .
}
Errors
If an error occurs, errno is set to one of the following values:
Option -option CAUSE When invoking a program that calls getopt(), you
argument missing specified -option but did not provide the argument
that optstring indicated.
ACTION Provide the missing argument.
Unknown option CAUSE When invoking a program that calls getopt(), you
"-option" specified an option that was not in optstring.
ACTION Specify an option included in optstring.
Implementation Considerations
The current implementation of MPE/iX uses the INFO string to pass
arguments to programs. If the size of this string plus the size of the
current environment (determined by the number and size of the environment
variables in the current process) is greater than 8192 bytes, the string
is too long to pass to a subprocess and the process creation fails.
See Also
getopt(1), getopts(1)
MPE/iX 5.0 Documentation