GETOPT(3) UNIX Programmer's Manual 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 argument 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 processed. 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 ques- tion 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) Printed 12/27/86 May 27, 1986 1 GETOPT(3) UNIX Programmer's Manual GETOPT(3) 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. Modified by Keith Bostic to behave more like the Sys- tem V version. BUGS It is not obvious how `-' standing alone should be treated; this version treats it as a non-option argument, which is not always right. Option arguments are allowed to begin with `-'; this is rea- sonable but reduces the amount of error checking possible. Printed 12/27/86 May 27, 1986 2 GETOPT(3) UNIX Programmer's Manual GETOPT(3) _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 argu- ments, etc. Printed 12/27/86 May 27, 1986 3