"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:
- speel -h
- speel ploink.wav
- speel -v -o ploink.mp3
- speel -s48000
- speel -s32000 ploink.mp3
#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