Annotation of 43BSDReno/lib/libc/gen/getopt.3, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1988 Regents of the University of California.
                      2: .\" All rights reserved.
                      3: .\"
                      4: .\" Redistribution and use in source and binary forms are permitted provided
                      5: .\" that: (1) source distributions retain this entire copyright notice and
                      6: .\" comment, and (2) distributions including binaries display the following
                      7: .\" acknowledgement:  ``This product includes software developed by the
                      8: .\" University of California, Berkeley and its contributors'' in the
                      9: .\" documentation or other materials provided with the distribution and in
                     10: .\" all advertising materials mentioning features or use of this software.
                     11: .\" Neither the name of the University nor the names of its contributors may
                     12: .\" be used to endorse or promote products derived from this software without
                     13: .\" specific prior written permission.
                     14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
                     15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
                     16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     17: .\"
                     18: .\"    @(#)getopt.3    6.15 (Berkeley) 6/23/90
                     19: .\"
                     20: .TH GETOPT 3 "June 23, 1990"
                     21: .UC 6
                     22: .SH NAME
                     23: getopt \- get option letter from argv
                     24: .SH SYNOPSIS
                     25: .ft B
                     26: .nf
                     27: int getopt(argc, argv, optstring)
                     28: int argc;
                     29: char **argv;
                     30: char *optstring;
                     31: .sp
                     32: extern char *optarg;
                     33: extern int optind;
                     34: extern int opterr;
                     35: .ft
                     36: .SH DESCRIPTION
                     37: .I Getopt
                     38: returns the next option letter in
                     39: .I argv
                     40: that matches a letter in
                     41: .IR optstring .
                     42: .I Optstring
                     43: is a string of recognized option letters; if a letter is followed by a
                     44: colon, the option is expected to have an argument that may or may not
                     45: be separated from it by white space.
                     46: .PP
                     47: On return from
                     48: .IR getopt ,
                     49: optarg is set to point to the start of any option argument.
                     50: .I Optind
                     51: contains the
                     52: .I argv
                     53: index of the next argument to be processed.
                     54: .PP
                     55: .I Opterr
                     56: and
                     57: .I optind
                     58: are both initialized to 1.
                     59: In order to use
                     60: .I getopt
                     61: to evaluate multiple sets of arguments, or to evaluate a single set of
                     62: arguments multiple times,
                     63: .I optind
                     64: must be initialized to the number of argv entries to be skipped in each
                     65: evaluation.
                     66: .PP
                     67: When all options have been processed (i.e., up to the first non-option
                     68: argument),
                     69: .I getopt
                     70: returns EOF.
                     71: The special option ``\-\-'' may be used to delimit the end of the options;
                     72: EOF will be returned, and the ``\-\-'' will be skipped.
                     73: .SH DIAGNOSTICS
                     74: .I Getopt
                     75: prints an error message on
                     76: .I stderr
                     77: and returns a question mark (``?'') when it encounters an option
                     78: letter not included in
                     79: .IR optstring ,
                     80: or it encounters an option that requires an argument which is not
                     81: supplied.
                     82: Setting
                     83: .I opterr
                     84: to a zero will disable these error messages.
                     85: .SH EXAMPLE
                     86: .nf
                     87: .in +5
                     88: extern char *optarg;
                     89: extern int optind;
                     90: int bflag, ch, fd;
                     91: 
                     92: bflag = 0;
                     93: while ((ch = getopt(argc, argv, "bf:")) != EOF)
                     94:        switch(ch) {
                     95:        case 'b':
                     96:                bflag = 1;
                     97:                break;
                     98:        case 'f':
                     99:                if ((fd = open(optarg, O_RDONLY, 0)) < 0) {
                    100:                        (void)fprintf(stderr,
                    101:                            "myname: unable to read file %s.\en", optarg);
                    102:                        exit(1);
                    103:                }
                    104:                break;
                    105:        case '?':
                    106:        default:
                    107:                usage();
                    108:        }
                    109: argc -= optind;
                    110: argv += optind;
                    111: .fi
                    112: .SH BUGS
                    113: Option arguments are allowed to begin with ``\-''; this is reasonable but
                    114: reduces the amount of error checking possible.
                    115: .PP
                    116: A single dash (``-'') may be specified as an character in
                    117: .IR optstring ,
                    118: however it should
                    119: .B never
                    120: have an argument associated with it.
                    121: This allows
                    122: .I getopt
                    123: to be used with programs that expect ``-'' as an option flag.
                    124: This practice is wrong, and should not be used in any current development.
                    125: It is provided for backward compatibility
                    126: .BR only .
                    127: By default, a single dash causes
                    128: .I getopt
                    129: to return EOF.
                    130: This is, we believe, compatible with System V.
                    131: .PP
                    132: It is also possible to handle digits as option letters.
                    133: This allows
                    134: .I getopt
                    135: to be used with programs that expect a number (``-3'') as an option.
                    136: This practice is wrong, and should not be used in any current development.
                    137: It is provided for backward compatibility
                    138: .BR only .
                    139: The following code fragment works fairly well.
                    140: .sp
                    141: .nf
                    142: .in +5
                    143: int length;
                    144: char *p;
                    145: 
                    146: while ((c = getopt(argc, argv, "0123456789")) != EOF)
                    147:        switch (c) {
                    148:        case '0': case '1': case '2': case '3': case '4':
                    149:        case '5': case '6': case '7': case '8': case '9':
                    150:                p = argv[optind - 1];
                    151:                if (p[0] == '-' && p[1] == ch && !p[2])
                    152:                        length = atoi(++p);
                    153:                else
                    154:                        length = atoi(argv[optind] + 1);
                    155:                break;
                    156:        }
                    157: }
                    158: .fi

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.