|
|
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.