p 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. If an individual character is followed by two colons, then the option argument is optional; .Va optarg is set to the rest of the current .Va argv word, or .Dv NULL if there were no more characters in the current word. This is a .Nx extension. For example, an option string .Qq x recognizes an option .Dq Fl x , and an option string .Qq x: recognizes an option and argument .Dq Fl x Ar argument . It does not matter to .Fn getopt if a following argument has leading whitespace.
p On return from .Fn getopt , .Va optarg points to an option argument, if it is anticipated, and the variable .Va optind contains the index to the next .Fa argv argument for a subsequent call to .Fn getopt . The variable .Va optopt saves the last .Em known option character returned by .Fn getopt .
p The variables .Va opterr and .Va optind are both initialized to 1. The .Va optind variable may be set to another value before a set of calls to .Fn getopt in order to skip over more or less argv entries.
p In order to use .Fn getopt to evaluate multiple sets of arguments, or to evaluate a single set of arguments multiple times, the variable .Va optreset must be set to 1 before the second and each additional set of calls to .Fn getopt , and the variable .Va optind must be reinitialized.
p The .Fn getopt function returns -1 when the argument list is exhausted. The interpretation of options in the argument list may be cancelled by the option .Dq -- (double dash) which causes .Fn 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), .Fn getopt returns -1. .Sh RETURN VALUES The .Fn getopt function returns the next known option character in .Fa optstring . If .Fn getopt encounters a character not found in .Fa optstring or if it detects a missing option argument, it returns .Sq ? (question mark). If .Fa optstring has a leading .Sq : then a missing option argument causes .Sq : to be returned instead of .Sq ? . In either case, the variable .Va optopt is set to the character that caused the error. The .Fn getopt function returns -1 when the argument list is exhausted. .Sh EXAMPLES d -literal -compact extern char *optarg; extern int optind; 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\en", optarg, strerror(errno)); exit(1); } break; case '?': default: usage(); } } argc -= optind; argv += optind; .Ed .Sh DIAGNOSTICS If the .Fn getopt function encounters a character not found in the string .Fa optstring or detects a missing option argument it writes an error message to .Em stderr and returns .Sq ? . Setting .Va opterr to a zero will disable these error messages. If .Fa optstring has a leading .Sq : then a missing option argument causes a .Sq : to be returned in addition to suppressing any error messages.
p Option arguments are allowed to begin with .Sq - ; this is reasonable but reduces the amount of error checking possible. .Sh SEE ALSO .Xr getopt 1 , .Xr getopt_long 3 , .Xr getsubopt 3 .Sh STANDARDS The .Va optreset variable was added to make it possible to call the .Fn getopt function multiple times. This is an extension to the .St -p1003.2 specification. .Sh HISTORY The .Fn getopt function appeared in x 4.3 . .Sh BUGS The .Fn getopt function was once specified to return .Dv EOF instead of -1. This was changed by .St -p1003.2-92 to decouple .Fn getopt from n stdio.h .
p A single dash
q Sq - may be specified as a character in .Fa optstring , however it should .Em never have an argument associated with it. This allows .Fn getopt to be used with programs that expect .Sq - as an option flag. This practice is wrong, and should not be used in any current development. It is provided for backward compatibility .Em only . Care should be taken not to use .Sq - as the first character in .Fa optstring to avoid a semantic conflict with .Tn GNU .Fn getopt , which assigns different meaning to an .Fa optstring that begins with a .Sq - . By default, a single dash causes .Fn getopt to return -1.
p It is also possible to handle digits as option letters. This allows .Fn getopt to be used with programs that expect a number
q Dq Li -3 as an option. This practice is wrong, and should not be used in any current development. It is provided for backward compatibility .Em only . The following code fragment works in most cases. d -literal -offset indent int ch; long length; char *p; 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'; else length = strtol(argv[optind] + 1, NULL, 10); break; } } .Ed