1 | #include <getopt.h>
|
---|
2 | #include <stdio.h>
|
---|
3 | #include <string.h>
|
---|
4 | #include <unistd.h>
|
---|
5 |
|
---|
6 | int
|
---|
7 | main (int argc, char **argv)
|
---|
8 | {
|
---|
9 | static const struct option options[] =
|
---|
10 | {
|
---|
11 | {"required", required_argument, NULL, 'r'},
|
---|
12 | {"optional", optional_argument, NULL, 'o'},
|
---|
13 | {"none", no_argument, NULL, 'n'},
|
---|
14 | {"color", no_argument, NULL, 'C'},
|
---|
15 | {"colour", no_argument, NULL, 'C'},
|
---|
16 | {NULL, 0, NULL, 0 }
|
---|
17 | };
|
---|
18 |
|
---|
19 | int aflag = 0;
|
---|
20 | int bflag = 0;
|
---|
21 | char *cvalue = NULL;
|
---|
22 | int Cflag = 0;
|
---|
23 | int nflag = 0;
|
---|
24 | int index;
|
---|
25 | int c;
|
---|
26 | int result = 0;
|
---|
27 |
|
---|
28 | while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0)
|
---|
29 | switch (c)
|
---|
30 | {
|
---|
31 | case 'a':
|
---|
32 | aflag = 1;
|
---|
33 | break;
|
---|
34 | case 'b':
|
---|
35 | bflag = 1;
|
---|
36 | break;
|
---|
37 | case 'c':
|
---|
38 | cvalue = optarg;
|
---|
39 | break;
|
---|
40 | case 'C':
|
---|
41 | ++Cflag;
|
---|
42 | break;
|
---|
43 | case '?':
|
---|
44 | fputs ("Unknown option.\n", stderr);
|
---|
45 | return 1;
|
---|
46 | default:
|
---|
47 | fprintf (stderr, "This should never happen!\n");
|
---|
48 | return 1;
|
---|
49 |
|
---|
50 | case 'r':
|
---|
51 | printf ("--required %s\n", optarg);
|
---|
52 | result |= strcmp (optarg, "foobar") != 0;
|
---|
53 | break;
|
---|
54 | case 'o':
|
---|
55 | printf ("--optional %s\n", optarg);
|
---|
56 | result |= optarg == NULL || strcmp (optarg, "bazbug") != 0;
|
---|
57 | break;
|
---|
58 | case 'n':
|
---|
59 | puts ("--none");
|
---|
60 | nflag = 1;
|
---|
61 | break;
|
---|
62 | }
|
---|
63 |
|
---|
64 | printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n",
|
---|
65 | aflag, bflag, cvalue, Cflag, nflag);
|
---|
66 |
|
---|
67 | result |= (aflag != 1 || bflag != 1 || cvalue == NULL
|
---|
68 | || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1);
|
---|
69 |
|
---|
70 | for (index = optind; index < argc; index++)
|
---|
71 | printf ("Non-option argument %s\n", argv[index]);
|
---|
72 |
|
---|
73 | result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0;
|
---|
74 |
|
---|
75 | return result;
|
---|
76 | }
|
---|