|  | #include <getopt.h> | 
|  | #include <stdio.h> | 
|  | #include <string.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | int | 
|  | main (int argc, char **argv) | 
|  | { | 
|  | static const struct option options[] = | 
|  | { | 
|  | {"required", required_argument, NULL, 'r'}, | 
|  | {"optional", optional_argument, NULL, 'o'}, | 
|  | {"none",     no_argument,       NULL, 'n'}, | 
|  | {"color",    no_argument,       NULL, 'C'}, | 
|  | {"colour",   no_argument,       NULL, 'C'}, | 
|  | {NULL,       0,                 NULL, 0 } | 
|  | }; | 
|  |  | 
|  | int aflag = 0; | 
|  | int bflag = 0; | 
|  | char *cvalue = NULL; | 
|  | int Cflag = 0; | 
|  | int nflag = 0; | 
|  | int index; | 
|  | int c; | 
|  | int result = 0; | 
|  |  | 
|  | while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0) | 
|  | switch (c) | 
|  | { | 
|  | case 'a': | 
|  | aflag = 1; | 
|  | break; | 
|  | case 'b': | 
|  | bflag = 1; | 
|  | break; | 
|  | case 'c': | 
|  | cvalue = optarg; | 
|  | break; | 
|  | case 'C': | 
|  | ++Cflag; | 
|  | break; | 
|  | case '?': | 
|  | fputs ("Unknown option.\n", stderr); | 
|  | return 1; | 
|  | default: | 
|  | fprintf (stderr, "This should never happen!\n"); | 
|  | return 1; | 
|  |  | 
|  | case 'r': | 
|  | printf ("--required %s\n", optarg); | 
|  | result |= strcmp (optarg, "foobar") != 0; | 
|  | break; | 
|  | case 'o': | 
|  | printf ("--optional %s\n", optarg); | 
|  | result |= optarg == NULL || strcmp (optarg, "bazbug") != 0; | 
|  | break; | 
|  | case 'n': | 
|  | puts ("--none"); | 
|  | nflag = 1; | 
|  | break; | 
|  | } | 
|  |  | 
|  | printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n", | 
|  | aflag, bflag, cvalue, Cflag, nflag); | 
|  |  | 
|  | result |= (aflag != 1 || bflag != 1 || cvalue == NULL | 
|  | || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1); | 
|  |  | 
|  | for (index = optind; index < argc; index++) | 
|  | printf ("Non-option argument %s\n", argv[index]); | 
|  |  | 
|  | result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0; | 
|  |  | 
|  | return result; | 
|  | } |