GETOPT(3) GETOPT(3) NAME getopt - get option letter from argv SYNOPSIS int getopt(argc, argv, optstring) int argc; char **argv; char *optstring; extern char *optarg; extern int optind; DESCRIPTION _G_e_t_o_p_t returns the next option letter in _a_r_g_v that matches a letter in _o_p_t_s_t_r_i_n_g. _O_p_t_s_t_r_i_n_g is a string of recognized option letters; if a letter is followed by a colon, the option is expected to have an argu‐ ment that may or may not be separated from it by white space. _O_p_t_a_r_g is set to point to the start of the option argument on return from _g_e_t_o_p_t. _G_e_t_o_p_t places in _o_p_t_i_n_d the _a_r_g_v index of the next argument to be pro‐ cessed. Because _o_p_t_i_n_d is external, it is normally initialized to zero automatically before the first call to _g_e_t_o_p_t. When all options have been processed (i.e., up to the first non-option argument), _g_e_t_o_p_t returns EOF. The special option -- may be used to delimit the end of the options; EOF will be returned, and -- will be skipped. DIAGNOSTICS _G_e_t_o_p_t prints an error message on _s_t_d_e_r_r and returns a question mark (?) when it encounters an option letter not included in _o_p_t_s_t_r_i_n_g. EXAMPLE The following code fragment shows how one might process the arguments for a command that can take the mutually exclusive options a and b, and the options f and o, both of which require arguments: main(argc, argv) int argc; char **argv; { int c; extern int optind; extern char *optarg; . . . while ((c = getopt(argc, argv, "abf:o:")) != EOF) switch (c) { case ‘a’: if (bflg) errflg++; else aflg++; break; case ‘b’: if (aflg) errflg++; else bproc(); break; case ‘f’: ifile = optarg; break; case ‘o’: ofile = optarg; break; case ‘?’: default: errflg++; break; } if (errflg) { fprintf(stderr, "Usage: ..."); exit(2); } for (; optind < argc; optind++) { . . . } . . . } HISTORY Written by Henry Spencer, working from a Bell Labs manual page. Modi‐ fied by Keith Bostic to behave more like the System V version. BUGS It is not obvious how ‘-’ standing alone should be treated; this ver‐ sion treats it as a non-option argument, which is not always right. Option arguments are allowed to begin with ‘-’; this is reasonable but reduces the amount of error checking possible. _G_e_t_o_p_t is quite flexible but the obvious price must be paid: there is much it could do that it doesn’t, like checking mutually exclusive options, checking type of option arguments, etc. 4.3 Berkeley Distribution May 27, 1986 GETOPT(3)