| #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; |
| } |