Skip to content

Instantly share code, notes, and snippets.

@jaypeche
Created December 4, 2014 00:11
Show Gist options
  • Select an option

  • Save jaypeche/41f082c73deed921b8e3 to your computer and use it in GitHub Desktop.

Select an option

Save jaypeche/41f082c73deed921b8e3 to your computer and use it in GitHub Desktop.
getopt_POSIX_CORRECTLY
#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);
}
#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