#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void usage (const char *programName)
{
printf ("Usage: %s [-kldeh]\n"
" -k <val_k> Value for the the option -k\n"
" -l <val_l> Value for the the option -l\n"
" -d Does not have any value\n"
" -e Does not have any value\n"
" -h Print this message\n\n",
programName);
exit (EXIT_SUCCESS);
}
int main (int argc, char **argv)
{
char *val_k = NULL;
int index = 0;
int c = 0;
if (1 == argc)
{
printf ("This tool needs at lease one input arguments.\n");
usage (argv[0]);
}
/* Check the input arguments/options */
while (-1 != (c = getopt (argc, argv, "k:l:deh")))
{
switch (c)
{
case 'k':
/* Assign the optarg pointer to a local variable for further use. */
val_k = optarg;
printf ("value for the option [k] is \"%s\"\n", val_k);
break;
case 'l':
/* We can use the variable optarg directly too. */
printf ("value for the option [l] is \"%s\"\n", optarg);
break;
case 'd':
printf ("option [d] is given.\n");
break;
case 'e':
printf ("option [e] is given.\n");
break;
case 'h':
usage (argv[0]);
case '?':
if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
usage (argv[0]);
default:
abort ();
}
}
for (index = optind; index < argc; index++)
{
printf ("Extra arguments [%d] --> %s\n", index, argv[index]);
}
return 0;
}
Parsing Long options:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <getopt.h>
static struct option options[] = {
/* These options set a flag. */
{"option_k", 1, 0, 'k'},
{"option_l", 1, 0, 'l'},
{"option_d", 0, 0, 'd'},
{"option_e", 0, 0, 'e'},
{"help", 0, 0, 'h'},
{0, 0, 0, 0}
};
void usage (const char *programName)
{
printf ("Usage: %s [-kldeh]\n"
" -k or --option_k <val_k> Value for the the option -k\n"
" -l or --option_l <val_l> Value for the the option -l\n"
" -d or --option_d Does not have any value\n"
" -e or --option_e Does not have any value\n"
" -h or --help Print this message\n\n",
programName);
exit (EXIT_SUCCESS);
}
int main (int argc, char **argv)
{
char *val_k = NULL;
int index = 0;
int c = 0;
int option_index = 0;
if (1 == argc)
{
printf ("This tool needs at lease one input arguments.\n");
usage (argv[0]);
}
/* Check the input arguments/options */
while (-1 != (c = getopt_long (argc, argv, "k:l:deh",
options, &option_index)))
{
switch (c)
{
case 'k':
/* Assign the optarg pointer to a local variable for further use. */
val_k = optarg;
printf ("value for the option [k] is \"%s\"\n", val_k);
break;
case 'l':
/* We can use the variable optarg directly too. */
printf ("value for the option [l] is \"%s\"\n", optarg);
break;
case 'd':
printf ("option [d] is given.\n");
break;
case 'e':
printf ("option [e] is given.\n");
break;
case 'h':
usage (argv[0]);
case '?':
if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
usage (argv[0]);
default:
abort ();
}
}
for (index = optind; index < argc; index++)
{
printf ("Extra arguments [%d] --> %s\n", index, argv[index]);
}
return 0;
}
Ref: http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_22.html