The GNU C Library - Long Option Example

Node: Long Option Example Prev: Long Options Up: Program Arguments

Example of Parsing Long Options

	#include <stdio.h>
	
	/* Flag set by `--verbose'. */
	static int verbose_flag;
	
	int
	main (argc, argv)
	     int argc;
	     char **argv;
	{
	  int c;
	
	  while (1)
	    {
	      static struct option long_options[] =
	        {
	          /* These options set a flag. */
	          {"verbose", 0, &verbose_flag, 1},
	          {"brief", 0, &verbose_flag, 0},
	          /* These options don't set a flag.
	             We distinguish them by their indices. */
	          {"add", 1, 0, 0},
	          {"append", 0, 0, 0},
	          {"delete", 1, 0, 0},
	          {"create", 0, 0, 0},
	          {"file", 1, 0, 0},
	          {0, 0, 0, 0}
	        };
	      /* getopt_long  stores the option index here. */
	      int option_index = 0;
	
	      c = getopt_long (argc, argv, "abc:d:",
	                       long_options, &option_index);
	
	      /* Detect the end of the options. */
	      if (c == -1)
	        break;
	
	      switch (c)
	        {
	        case 0:
	          /* If this option set a flag, do nothing else now. */
	          if (long_options[option_index].flag != 0)
	            break;
	          printf ("option %s", long_options[option_index].name);
	          if (optarg)
	            printf (" with arg %s", optarg);
	          printf ("\n");
	          break;
	
	        case 'a':
	          puts ("option -a\n");
	          break;
	
	        case 'b':
	          puts ("option -b\n");
	          break;
	
	        case 'c':
	          printf ("option -c with value `%s'\n", optarg);
	          break;
	
	        case 'd':
	          printf ("option -d with value `%s'\n", optarg);
	          break;
	
	        case '?':
	          /* getopt_long  already printed an error message. */
	          break;
	
	        default:
	          abort ();
	        }
	    }
	
	  /* Instead of reporting `--verbose'
	     and `--brief' as they are encountered,
	     we report the final status resulting from them. */
	  if (verbose_flag)
	    puts ("verbose flag is set");
	
	  /* Print any remaining command line arguments (not options). */
	  if (optind < argc)
	    {
	      printf ("non-option ARGV-elements: ");
	      while (optind < argc)
	        printf ("%s ", argv[optind++]);
	      putchar ('\n');
	    }
	
	  exit (0);
	}


Up: Program Arguments