popt(3) -- Linux man page



popt - Parse command line options  


#include <popt.h>

poptContext poptGetContext(const char * name, int argc,
                           const char ** argv,
                           const struct poptOption * options,
                           int flags);

void poptFreeContext(poptContext con);

void poptResetContext(poptContext con);

int poptGetNextOpt(poptContext con);

const char * poptGetOptArg(poptContext con);

const char * poptGetArg(poptContext con);

const char * poptPeekArg(poptContext con);

const char ** poptGetArgs(poptContext con);

const char *const poptStrerror(const int error);

const char * poptBadOption(poptContext con, int flags);

int poptReadDefaultConfig(poptContext con, int flags);

int poptReadConfigFile(poptContext con, char * fn);

int poptAddAlias(poptContext con, struct poptAlias alias,
                 int flags);

int poptParseArgvString(char * s, int *  argcPtr,
                        const char *** argvPtr);

int poptDupArgv(int argc, const char ** argv, int * argcPtr,
                        const char *** argvPtr);

int poptStuffArgs(poptContext con, const char ** argv);



The popt library exists essentially for parsing command-line options. It is found superior in many ways when compared to parsing the argv array by hand or using the getopt functions getopt() and getopt_long() [see getopt(3)]. Some specific advantages of popt are: it does not utilize global variables, thus enabling multiple passes in parsing argv ; it can parse an arbitrary array of argv-style elements, allowing parsing of command-line-strings from any source; it provides a standard method of option aliasing (to be discussed at length below.); it can exec external option filters; and, finally, it can automatically generate help and usage messages for the application.

Like getopt_long(), the popt library supports short and long style options. Recall that a short option consists of a - character followed by a single alphanumeric character. A long option, common in GNU utilities, consists of two - characters followed by a string made up of letters, numbers and hyphens. Long options are optionally allowed to begin with a single -, primarily to allow command-line compatibility between popt applications and X toolkit applications. Either type of option may be followed by an argument. A space separates a short option from its arguments; either a space or an = separates a long option from an argument.

The popt library is highly portable and should work on any POSIX platform. The latest version is distributed with rpm and is always available from: ftp://ftp.rpm.org/pub/rpm/dist.

It may be redistributed under the X consortium license, see the file COPYING in the popt source distribution for details.  




Applications provide popt with information on their command-line options by means of an "option table," i.e., an array of struct poptOption structures:

#include <popt.h>

struct poptOption {
    const char * longName; /* may be NULL */
    char shortName;        /* may be '\0' */
    int argInfo;
    void * arg;            /* depends on argInfo */
    int val;               /* 0 means don't return, just update flag */
    char * descrip;        /* description for autohelp -- may be NULL */
    char * argDescrip;     /* argument description for autohelp */

Each member of the table defines a single option that may be passed to the program. Long and short options are considered a single option that may occur in two different forms. The first two members, longName and shortName, define the names of the option; the first is a long name, while the latter is a single character.

The argInfo member tells popt what type of argument is expected after the argument. If no option is expected, POPT_ARG_NONE should be used. The rest of the valid values are shown in the following table:

For numeric values, if the argInfo value is bitwise or'd with one of