Here is a skeleton which implements a traditional Unix-style argv parse, handling
option flags beginning with -, and optional filenames. (The two flags accepted by
this example are -a and -b; -b takes an argument.)
#include <stdio.h>
#include <string.h>
#include <errno.h>
main(int argc, char *argv[])
{
int argi;
int aflag = 0;
char *bval = NULL;
for(argi = 1; argi < argc && argv[argi][0] == '-'; argi++) {
char *p;
for(p = &argv[argi][1]; *p != ''; p++) {
switch(*p) {
case 'a':
aflag = 1;
printf("-a seenn");
break;
case 'b':
bval = argv[++argi];
printf("-b seen ("%s")n", bval);
break;
default:
fprintf(stderr,
"unknown option -%cn", *p);
}
}
}
if(argi >= argc) {
/* no filename arguments; process stdin */
printf("processing standard inputn");
} else {
/* process filename arguments */
for(; argi < argc; argi++) {
FILE *ifp = fopen(argv[argi], "r");
if(ifp == NULL) {
fprintf(stderr, "can't open %s: %sn",
argv[argi], strerror(errno));
continue;
}
printf("processing %sn", argv[argi]);
fclose(ifp);
}
}
return 0;
}