Parsing command-line arguments with getopt, continued
Let's repeat the previous example,
but now support an additional command switch that provides a number as
well.
The getopt function is informed,
through the OPTLIST character string,
that an argument is expected after the new -n switch.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>
#define OPTLIST "df:n:"
int main(int argc, char *argv[])
{
int opt;
bool dflag = false;
char *filenm = NULL;
int value = DEFAULT_VALUE;
opterr = 0;
while((opt = getopt(argc, argv, OPTLIST)) != -1) {
// ACCEPT A BOOLEAN ARGUMENT
if(opt == 'd') {
dflag = !dflag;
}
// ACCEPT A STRING ARGUMENT
else if(opt == 'f') {
filenm = strdup(optarg);
}
// ACCEPT A INTEGER ARGUMENT
else if(opt == 'n') {
value = atoi(optarg);
}
// OOPS - AN UNKNOWN ARGUMENT
else {
argc = -1;
}
}
if(argc <= 0) { // display program's usage/help
usage(1);
}
argc -= optind;
argv += optind;
.....
return 0;
}
|
getopt sets the global pointer variable optarg
to point to the actual value provided after -n -
regardless of whether any spaces appear between the switch and the value.
CITS2002 Systems Programming, Lecture 18, p7, 2nd October 2023.
|