Created
December 4, 2014 00:11
-
-
Save jaypeche/41f082c73deed921b8e3 to your computer and use it in GitHub Desktop.
getopt_POSIX_CORRECTLY
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> /* for printf */ | |
| #include <stdlib.h> /* for exit */ | |
| #include <getopt.h> | |
| int | |
| main(int argc, char **argv) | |
| { | |
| int c; | |
| int digit_optind = 0; | |
| while (1) { | |
| int this_option_optind = optind ? optind : 1; | |
| int option_index = 0; | |
| static struct option long_options[] = | |
| { | |
| {"add", 1, 0, 0}, | |
| {"append", 0, 0, 0}, | |
| {"delete", 1, 0, 0}, | |
| {"verbose", 0, 0, 0}, | |
| {"create", 1, 0, aqcaq}, | |
| {"file", 1, 0, 0}, | |
| {0, 0, 0, 0} | |
| }; | |
| c = getopt_long(argc, argv, "abc:d:012", | |
| long_options, &option_index); | |
| if (c == -1) | |
| break; | |
| switch (c) { | |
| case 0: | |
| printf("option %s", long_options[option_index].name); | |
| if (optarg) | |
| printf(" avec argument %s", optarg); | |
| printf("\n"); | |
| break; | |
| case aq0aq: | |
| case aq1aq: | |
| case aq2aq: | |
| if (digit_optind != 0 && digit_optind != this_option_optind) | |
| printf("chiffre dans deux arguments.\n"); | |
| digit_optind = this_option_optind; | |
| printf("option %c\n", c); | |
| break; | |
| case aqaaq: | |
| printf("option a\n"); | |
| break; | |
| case aqbaq: | |
| printf("option b\n"); | |
| break; | |
| case aqcaq: | |
| printf("option c de valeur aq%saq\n", optarg); | |
| break; | |
| case aqdaq: | |
| printf("option d de valeur aq%saq\n", optarg); | |
| break; | |
| case aq?aq: | |
| break; | |
| default: | |
| printf("?? caractère de code 0%o ??\n", c); | |
| } | |
| } | |
| if (optind < argc) { | |
| printf("Arguments ne constituant pas des options : "); | |
| while (optind < argc) | |
| printf("%s ", argv[optind++]); | |
| printf("\n"); | |
| } | |
| exit(EXIT_SUCCESS); | |
| } |
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 <unistd.h> | |
| #include <stdlib.h> | |
| #include <stdio.h> | |
| int | |
| main(int argc, char *argv[]) | |
| { | |
| int flags, opt; | |
| int nsecs, tfnd; | |
| nsecs = 0; | |
| tfnd = 0; | |
| flags = 0; | |
| while ((opt = getopt(argc, argv, "nt:")) != -1) { | |
| switch (opt) { | |
| case aqnaq: | |
| flags = 1; | |
| break; | |
| case aqtaq: | |
| nsecs = atoi(optarg); | |
| tfnd = 1; | |
| break; | |
| default: /* aq?aq */ | |
| fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n", | |
| argv[0]); | |
| exit(EXIT_FAILURE); | |
| } | |
| } | |
| printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind); | |
| if (optind >= argc) { | |
| fprintf(stderr, "Expected argument after options\n"); | |
| exit(EXIT_FAILURE); | |
| } | |
| printf("name argument = %s\n", argv[optind]); | |
| /* Other code omitted */ | |
| exit(EXIT_SUCCESS); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment