|
|
1.1 root 1: .TH GETOPT 3 local
2: .DA 25 March 1982
3: .SH NAME
4: getopt \- get option letter from argv
5: .SH SYNOPSIS
6: .ft B
7: int getopt(argc, argv, optstring)
8: .br
9: int argc;
10: .br
11: char **argv;
12: .br
13: char *optstring;
14: .sp
15: extern char *optarg;
16: .br
17: extern int optind;
18: .ft
19: .SH DESCRIPTION
20: .I Getopt
21: returns the next option letter in
22: .I argv
23: that matches a letter in
24: .IR optstring .
25: .I Optstring
26: is a string of recognized option letters;
27: if a letter is followed by a colon, the option is expected to have
28: an argument that may or may not be separated from it by white space.
29: .I Optarg
30: is set to point to the start of the option argument on return from
31: .IR getopt .
32: .PP
33: .I Getopt
34: places in
35: .I optind
36: the
37: .I argv
38: index of the next argument to be processed.
39: Because
40: .I optind
41: is external, it is normally initialized to zero automatically
42: before the first call to
43: .IR getopt .
44: .PP
45: When all options have been processed (i.e., up to the first
46: non-option argument),
47: .I getopt
48: returns
49: .BR EOF .
50: The special option
51: .B \-\-
52: may be used to delimit the end of the options;
53: .B EOF
54: will be returned, and
55: .B \-\-
56: will be skipped.
57: .SH SEE ALSO
58: getopt(1)
59: .SH DIAGNOSTICS
60: .I Getopt
61: prints an error message on
62: .I stderr
63: and returns a question mark
64: .RB ( ? )
65: when it encounters an option letter not included in
66: .IR optstring .
67: .SH EXAMPLE
68: The following code fragment shows how one might process the arguments
69: for a command that can take the mutually exclusive options
70: .B a
71: and
72: .BR b ,
73: and the options
74: .B f
75: and
76: .BR o ,
77: both of which require arguments:
78: .PP
79: .RS
80: .nf
81: main(argc, argv)
82: int argc;
83: char **argv;
84: {
85: int c;
86: extern int optind;
87: extern char *optarg;
88: \&.
89: \&.
90: \&.
91: while ((c = getopt(argc, argv, "abf:o:")) != EOF)
92: switch (c) {
93: case 'a':
94: if (bflg)
95: errflg++;
96: else
97: aflg++;
98: break;
99: case 'b':
100: if (aflg)
101: errflg++;
102: else
103: bproc();
104: break;
105: case 'f':
106: ifile = optarg;
107: break;
108: case 'o':
109: ofile = optarg;
110: break;
111: case '?':
112: default:
113: errflg++;
114: break;
115: }
116: if (errflg) {
117: fprintf(stderr, "Usage: ...");
118: exit(2);
119: }
120: for (; optind < argc; optind++) {
121: \&.
122: \&.
123: \&.
124: }
125: \&.
126: \&.
127: \&.
128: }
129: .RE
130: .PP
131: A template similar to this can be found in
132: .IR /usr/pub/template.c .
133: .SH HISTORY
134: Written by Henry Spencer, working from a Bell Labs manual page.
135: Behavior believed identical to the Bell version.
136: .SH BUGS
137: It is not obvious how
138: `\-'
139: standing alone should be treated; this version treats it as
140: a non-option argument, which is not always right.
141: .PP
142: Option arguments are allowed to begin with `\-';
143: this is reasonable but reduces the amount of error checking possible.
144: .PP
145: .I Getopt
146: is quite flexible but the obvious price must be paid: there is much
147: it could do that it doesn't, like
148: checking mutually exclusive options, checking type of
149: option arguments, etc.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.