GETOPT() EXAMPLE ---------------- Reference --------- solaris> man -s 3c getopt Usage Examples -------------- foo -S SearchFile -L LogFile -N 1 Global Area ----------- /* define 3 switches: -S, -L, -N. The ":" says that there are */ /* values following the switches */ static char *options = "S:L:N:"; A function to process command line arguments -------------------------------------------- void parseargs(int argc, char *argv[]) { ... int c; int ok = 1; /* default parameter values */ ... /* processing loop */ while ((c = getopt(argc, argv, options)) != -1) { switch (c) { case 'S': sfname = strdup (optarg); break; case 'L': lfname = strdup (optarg); break; case 'N': N = atoi(optarg); ... break; default: ok = 0; } } if (!ok || optind < argc) { fprintf (stderr, "Usage: foo [-S SearchFile] [-N N]"); exit(1); } /* display parameter values */ ... } parseargs usage --------------- main(int argc, char *argv[]) { ... parseargs (argc, argv); /* get parameters */ ... } Equivalent C Code ----------------- The equivalent code using just 'argc' and 'argv' is something like: int nargs, i, N; char c; char sfname[MAXNAME], lfname[MAXNAME]; nargs = argc - 1; i = 0; while (i < nargs) { c = *(argv[i]); /* get 1st char of next arg */ switch (c) { case '-': if (i < (nargs-1)) { /* need another arg after the flag */ if (strcmp(argv[i], "-S") { sfname = strdup(argv[i+1]); break; } else if (strcmp(argv[i], "-L") { lfname = strdup(argv[i+1]); break; } else if (strcmp(argv[i], "-N") { N = atoi(argv[i+1]); break; } else { ... ERROR: Bad flag ... } i++; } else ... ERROR: missing arg ... default: ... ERROR ... } }