The GNU C Library - Example of Getopt

Node: Example of Getopt Next: Long Options Prev: Parsing Options Up: Program Arguments

Example of Parsing Arguments with getopt

Here is an example showing how getopt is typically used. The key points to notice are:

	#include <unistd.h>
	#include <stdio.h>
	
	int 
	main (int argc, char **argv)
	{
	  int aflag = 0;
	  int bflag = 0;
	  char *cvalue = NULL;
	  int index;
	  int c;
	
	  opterr = 0;
	
	  while ((c = getopt (argc, argv, "abc:")) != -1)
	    switch (c)
	      {
	      case 'a':
	        aflag = 1;
	        break;
	      case 'b':
	        bflag = 1;
	        break;
	      case 'c':
	        cvalue = optarg;
	        break;
	      case '?':
	        if (isprint (optopt))
	          fprintf (stderr, "Unknown option `-%c'.\n", optopt);
	        else
	          fprintf (stderr,
	                   "Unknown option character `\\x%x'.\n",
	                   optopt);
	        return 1;
	      default:
	        abort ();
	      }
	
	  printf ("aflag = %d, bflag = %d, cvalue = %s\n", aflag, bflag, cvalue);
	
	  for (index = optind; index < argc; index++)
	    printf ("Non-option argument %s\n", argv[index]);
	  return 0;
	}

Here are some examples showing what this program prints with different combinations of arguments:

	% testopt
	aflag = 0, bflag = 0, cvalue = (null)
	
	% testopt -a -b
	aflag = 1, bflag = 1, cvalue = (null)
	
	% testopt -ab
	aflag = 1, bflag = 1, cvalue = (null)
	
	% testopt -c foo
	aflag = 0, bflag = 0, cvalue = foo
	
	% testopt -cfoo
	aflag = 0, bflag = 0, cvalue = foo
	
	% testopt arg1
	aflag = 0, bflag = 0, cvalue = (null)
	Non-option argument arg1
	
	% testopt -a arg1
	aflag = 1, bflag = 0, cvalue = (null)
	Non-option argument arg1
	
	% testopt -c foo arg1
	aflag = 0, bflag = 0, cvalue = foo
	Non-option argument arg1
	
	% testopt -a -- -b
	aflag = 1, bflag = 0, cvalue = (null)
	Non-option argument -b
	
	% testopt -a -
	aflag = 1, bflag = 0, cvalue = (null)
	Non-option argument -


Next: Long Options Up: Program Arguments