p The option string .Fa optstring may contain the following characters; letters and letters followed by a colon to indicate an option argument is to follow. It does not matter to .Fn getopt if a following argument has leading white space.
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 .
p The variable .Va opterr and .Va optind are both initialized to 1. In order to use .Fn getopt to evaluate multiple sets of arguments, or to evaluate a single set of arguments multiple times, .Va optind must be initialized to the number of argv entries to be skipped in each evaluation.
p The .Fn getopt function returns an .Dv EOF when the argument list is exhausted, or a non-recognized option is encountered. The interpretation of options in the argument list may be cancelled by the option .Ql -- (double dash) which causes .Fn getopt to signal the end of argument processing and return an .Dv EOF . When all options have been processed (i.e., up to the first non-option argument), .Fn getopt returns .Dv EOF . .Sh DIAGNOSTICS If the .Fn getopt function encounters a character not found in the string .Va optarg or detects a missing option argument it writes error message .Ql ? to the .Em stderr . Setting .Va opterr to a zero will disable these error messages. .Sh EXAMPLE d -literal -compact extern char *optarg; extern int optind; int bflag, ch, fd; bflag = 0; while ((ch = getopt(argc, argv, "bf:")) != EOF) switch(ch) { case 'b': bflag = 1; break; case 'f': if ((fd = open(optarg, O_RDONLY, 0)) < 0) { (void)fprintf(stderr, "myname: unable to read file %s.\en", optarg); exit(1) ; } break; case '?': default: usage(); } argc -= optind; argv += optind; .Ed .Sh HISTORY The .Fn getopt function appeared x 4.3 . .Sh BUGS Option arguments are allowed to begin with .Dq Li - ; this is reasonable but reduces the amount of error checking possible.
p A single dash .Dq Li - may be specified as an 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 .Dq Li - 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 . By default, a single dash causes .Fn getopt to return .Dv EOF . This is, we believe, compatible with System V.
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 fairly well. d -literal -offset indent int length; char *p; while ((c = getopt(argc, argv, "0123456789")) != EOF) switch (c) { 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] == '-' && p[1] == ch && !p[2]) length = atoi(++p); else length = atoi(argv[optind] + 1); break; } } .Ed