/* * GETOPT -- show how getopt(3) handles options * * Matt Bishop, ECS 36A * * April 30, 2024 * -- original program written */ #include <stdio.h> #include <unistd.h> #include <getopt.h> extern char *optarg; /* argument to option */ extern int optind; /* index to next command line argument */ extern int opterr; /* 0 to suppress errors from getopt, non-zero otherwise */ extern int optopt; /* erroneous option if opterr is non-zero */ /* * a list of options to look for * if letter is not followed by :, the option does not have an argument * if letter is followed by :, the option *must* have an argument * if letter is followed by ::, the option *may* have an argument */ char *optstring = "ae:fx::y"; /* * main program */ int main(int argc, char *argv[]) { int c; /* return value of getopt */ int i; /* counter in a for loop */ /* * loop until you finish dealing with the options */ while((c = getopt(argc, argv, optstring)) != -1){ switch(c){ case 'a': /* plain old option */ printf("%s: got 'a' option\n", argv[0]); break; case 'e': /* option with argument */ printf("%s: got 'e' option, ", argv[0]); printf("argument '%s'\n", optarg); break; case 'x': /* option with optional argument */ printf("%s: got 'x' option, ", argv[0]); if (optarg == NULL) printf("but no argument to it\n"); else printf("argument '%s'\n", optarg); break; case '?': /* error */ break; default: /* should never happen */ fprintf(stderr, "%s: What in the world . .. . '%c'\n", argv[0], c); break; } } /* now print out the non-option arguments */ for(i = optind; i < argc; i++) printf("Command non-option argument '%s'\n", argv[i]); /* bye-bye! */ return(0); }
|
ECS 36A, Programming & Problem Solving Version of April 2, 2024 at 12:13PM
|
You can get the raw source code here. |