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