diff --git a/digressions/.gitignore b/digressions/.gitignore index 58f0bbb..d566aed 100644 --- a/digressions/.gitignore +++ b/digressions/.gitignore @@ -1,2 +1,3 @@ /temperatures /qsort-example +/getopt-example diff --git a/digressions/Makefile b/digressions/Makefile index 987521f..17f9f0f 100644 --- a/digressions/Makefile +++ b/digressions/Makefile @@ -3,6 +3,6 @@ CFLAGS += -g -Wall -Wextra -pedantic -pedantic-errors %.class:%.java javac -d $(PWD) $^ -all: temperatures qsort-example URLParts.class +all: temperatures qsort-example getopt-example URLParts.class .PHONY: all diff --git a/digressions/getopt-example.c b/digressions/getopt-example.c new file mode 100644 index 0000000..2401c4b --- /dev/null +++ b/digressions/getopt-example.c @@ -0,0 +1,45 @@ +/* + * Example getopt usage mostly from getopt(3) + */ +#include +#include +#include + +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 'n': + flags = 1; + break; + case 't': + nsecs = atoi(optarg); + tfnd = 1; + break; + default: /* '?' */ + 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); +}