# pmdagetoptions

## NAME



           **pmdaGetOpt** , **pmdaGetOptions** - get options from arguments, parsing
           generic PMDA options
    


## C SYNOPSIS



           **#include <pcp/pmapi.h>**
           **#include <pcp/pmda.h>**
    
           **int pmdaGetOptions(int** _argc_**, char *const ***_argv_**, pmdaOptions ***_opts_**,**
                              **pmdaInterface ***_dispatch_**);**
           **int pmdaGetOpt(int** _argc_**, char *const ***_argv_**, const char ***_optstring_**,**
                          **pmdaInterface ***_dispatch_**, int ***_err_**);**
    
           **cc ... -lpcp_pmda -lpcp**
    


## DESCRIPTION



           These  functions  are wrappers for pmgetopt_r(3).  The behavior of
           each function is that certain options are assumed to have a prede‐
           fined behavior which initializes several fields in the  **pmdaInter‐**
           **face** structure.   The  **pmdaGetOptions** interface allows both short
           and long options to be given, whereas **pmdaGetOpt** allows for  short
           form options only.
    
           The options that both **pmdaGetOptions** and **pmdaGetOpt** will trap are:
    
           **-D** _debugspec_
                  Set the PMAPI(3) debugging options to _debugspec_ , as de‐
                  scribed in PCPIntro(1).  Used for controlling levels of
                  trace output while debugging.
    
           **-d** _domain_
                  Set the _domain_ number of this agent.
    
           **-h** _helpfile_
                  Obtain the help text (see pmdaText(3)) for the metrics from
                  this file rather than from the path specified with
                  pmdaDSO(3) or pmdaDaemon(3).
    
           **-i** _port_ Expect PMCD to connect on inet _port_ (number or name).
    
           **-6** _port_ Expect PMCD to connect on ipv6 _port_ (number or name).
    
           **-l** _logfile_
                  Redirect diagnostics and trace output to _logfile_.
    
           **-p** Expect PMCD to supply stdin/stdout pipe.
    
           **-u** _socket_
                  Expect PMCD to connect on unix domain _socket_.
    
           The **pmdaGetOptions** interface will also capture the following op‐
           tions, and store them within the _opts_ parameter:
    
           **-U** _username_
                  Set the user account name under which the PMDA should exe‐
                  cute.
    
           Only one of **-i** , **-6** , **-p** and **-u** may be specified.  If none of these
           three options is given, a pipe (**-p**) is assumed.  When these op‐
           tions are encountered by **pmdaGetOpt** , the option is processed and
           the next option is examined.  Therefore, **pmdaGetOpt** will only re‐
           turn when an option other than those listed above is found, or the
           end of the list is reached.  The returned value will be the argu‐
           ment or EOF, respectively.
    
           A PMDA can control which of these options the program will accept
           with either the _opts_ or _optstring_ argument.  To accept all the op‐
           tions, the PMDA should call **pmdaGetOptions** with the short_options
           field of the _opts_ structure set to the PMDA_OPTIONS macro, or
           **pmdaGetOpt** with the option string "D:d:h:i:l:pu:".  Any PMDA spe‐
           cific options should be added to these strings in the style of
           getopt(3), and will be returned by both **pmdaGetOptions** and **pmdaGe‐**
           **tOpt** if encountered.
    
           When a command line option usage error is detected in the **pmdaGe‐**
           **tOptions** interface, the error field of the _opts_ structure will
           contain a non-zero error count.
    
           **pmdaGetOpt** takes a pointer to an int, _err_ , which is used as an er‐
           ror count.  This variable should be initialized to zero before
           **pmdaGetOpt** is first called, and tested when **pmdaGetOpt** returns
           EOF.
    
           Neither **pmdaGetOptions** nor **pmdaGetOpt** modify their _argc_ or _argv_
           parameters.
    
           The global variables used by the system getopt(3) interface may
           also be used by the caller of **pmdaGetOpt** within the argument pars‐
           ing loop.
    
           On the other hand, the **pmdaGetOptions** interface does not utilize
           global variables at all (neither reading nor modifying them).  In‐
           stead, these variables can be access via the _opts_ fields of the
           same name.
    


## CAVEAT



           The options **-D** , **-d** , **-i** , **-l** , **-p** and **-u** cannot be reused for other
           purposes by the PMDA, unless using the _override_ method provided by
           the **pmdaGetOptions** interface, which operates in the same way as
           described for the pmGetOptions(3) interface used by PMAPI client
           tools.
    
           The PMDA must be using **PMDA_INTERFACE_2** or later, as specified in
           the call to pmdaDSO(3) or pmdaDaemon(3).
    


## DIAGNOSTICS



           Both **pmdaGetOptions** and **pmdaGetOpt** will display the same error
           messages as **getopt**.
    


* * *