Gebruik van getopt()

"getopt" is een parser-functie voor command-line-argumenten bij het aanroepen van UNIX programma's vanuit de terminal. Je geeft in de functie-aanroep van getopt() een lijstje met te herkennen eenletterige argumenten. Een ':' betekent dat het gaat om een variabelen die een waarde krijgt. Een letter zonder ':' erna verwacht geen waarde op de command line maar dient om een optie aan te zetten (dat wordt een switch genoemd).

In het onderstaande voorbeeld staat na o en s een ':', wat betekent dat die een waarde verwachten. De opties h en v verwachten geen waarde.

Stel dat ons programma 'speel' heet, dan kun je het bijvoorbeeld zo gebruiken:


#include <iostream>
//#include <unistd.h>	// getopt()

using namespace std;


static void usage_notice(char *progname)
{
  cout << "\nUsage:\n";
  cout << progname << "[-v verbose] [-o file] [-s rate]" <<  endl;
  cout << "-o output file\n";
  cout << "-s sample rate\n";
} // usage_notice()



int main(int argc,char **argv)
{
extern char *optarg;
extern int optind;
int option;
bool outfileknown=false;

  while( (option=getopt(argc,argv,"ho:s:v")) != EOF){
    switch(option){
      case 'v': cout << "Verbose on" << endl;
      break;
      case 'o': cout << "Output file [-o]: " << optarg << endl;
		outfileknown=true;
      break;
      case 's': cout << "sample rate: " << atoi(optarg) << endl;
      break;
      case 'h': { // help
                 usage_notice(argv[0]);
                 exit(0);
                }
      break;
      case '?': { // unknown option
                 usage_notice(argv[0]);
                 exit(0);
                }
      break;
    } // switch
  } // while

  if(!outfileknown && argc <= optind) {
    cout << "\nPlease specify file name for output or -h for help\n";
    exit(0);
  }
  else{
    cout << "Output file: " << argv[optind] << endl;
  }

  return 0;
} // main