Created
October 11, 2015 12:21
-
-
Save dd1994/7d8a3a3c66379eda9827 to your computer and use it in GitHub Desktop.
a expamle of getopt_long
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <getopt.h> | |
/* Flag set by ‘--verbose’. */ | |
static int verbose_flag; | |
int main(int argc, const char *argv[]) { | |
int c; | |
while (1) { | |
static struct option long_options[] = { | |
/* These options set a flag. */ | |
{"verbose", no_argument, &verbose_flag, 1}, | |
{"brief", no_argument, &verbose_flag, 0}, | |
/* These options don’t set a flag. | |
We distinguish them by their indices. */ | |
{"add", no_argument, 0, 'a'}, | |
{"append", no_argument, 0, 'b'}, | |
{"delete", required_argument, 0, 'd'}, | |
{"create", required_argument, 0, 'c'}, | |
{"file", required_argument, 0, 'f'}, | |
{0, 0, 0, 0}}; | |
/* getopt_long stores the option index here. */ | |
int option_index = 0; | |
c = getopt_long(argc, argv, "abc:d:f:", long_options, &option_index); | |
/* Detect the end of the options. */ | |
if (c == -1) | |
break; | |
switch (c) { | |
case 0: | |
/* If this option set a flag, do nothing else now. */ | |
if (long_options[option_index].flag != 0) | |
break; | |
printf("option %s", long_options[option_index].name); | |
if (optarg) | |
printf(" with arg %s", optarg); | |
printf("\n"); | |
break; | |
case 'a': | |
puts("option -a\n"); | |
break; | |
case 'b': | |
puts("option -b\n"); | |
break; | |
case 'c': | |
printf("option -c with value `%s'\n", optarg); | |
break; | |
case 'd': | |
printf("option -d with value `%s'\n", optarg); | |
break; | |
case 'f': | |
printf("option -f with value `%s'\n", optarg); | |
break; | |
case '?': | |
/* getopt_long already printed an error message. */ | |
break; | |
default: | |
abort(); | |
} | |
} | |
/* Instead of reporting ‘--verbose’ | |
and ‘--brief’ as they are encountered, | |
we report the final status resulting from them. */ | |
if (verbose_flag) | |
puts("verbose flag is set"); | |
/* Print any remaining command line arguments (not options). */ | |
if (optind < argc) { | |
printf("non-option ARGV-elements: "); | |
while (optind < argc) | |
printf("%s ", argv[optind++]); | |
putchar('\n'); | |
} | |
exit(0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment