NAME
pmdaGetOpt - get options from argument vector, trapping generic PMDA
options
C SYNOPSIS
#include <pcp/pmapi.h>
#include <pcp/impl.h>
#include <pcp/pmda.h>
int pmdaGetOpt(int argc, char *const *argv, const char *optstring,
pmdaInterface *dispatch, int *err)
cc ... -lpcp_pmda -lpcp
DESCRIPTION
This function is a wrapper for getopt(3). The behavior of the function
is identical except that certain options are assumed to have a
predefined behavior which initializes several fields in the
pmdaInterface structure.
The options that pmdaGetOpt will trap are:
-Dtrace Set the PMAPI(3) debug control variable (pmDebug) to
trace. Used for controlling levels of trace output
while debugging.
-ddomain Set the domain number of this agent.
-hhelpfile 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).
-iport Expect PMCD to connect on inet port (number or name).
-llogfile Redirect diagnostics and trace output to logfile.
-p Expect PMCD to supply stdin/stdout pipe.
-usocket Expect PMCD to connect on unix domain socket.
Only one of -i, -p and -u may be specified. If none of these three
options is given, a pipe (-p) is assumed. When these options are
encountered by pmdaGetOpt, the option is processed and the next option
is examined. Therefore, pmdaGetOpt will only return when an option
other than those listed above is found, or the end of the list is
reached. The returned value will be the argument or EOF, respectively.
A PMDA can control which of these options the program will accept with
the optstring argument. To accept all the options, the PMDA should
call pmdaGetOpt with the option string "D:d:h:i:l:pu:". Any PMDA
specific options should be added to this string in the style of
getopt(3), and returned by pmdaGetOpt if encountered. However, the
PMDA cannot reuse any of the options specified above.
pmdaGetOpt takes a pointer to an int, err, which is used as an error
count. This variable should be initialized to zero before pmdaGetOpt
is first called, and tested when pmdaGetOpt returns EOF.
pmdaGetOpt does not modify argc or argv.
EXAMPLE
A PMDA which takes the additional argument -n and does not use pmDebug
might call pmdaGetOpt like this:
pmdaInterface dispatch;
int err = 0;
int c = 0;
while ((c = pmdaGetOpt(argv, argc, "d:h:i:l:pu:n:",
dispatch &err)) != EOF) {
/* process argument ānā, may use optarg etc. */
}
if (err)
usage(argv[0]);
The global variables used by getopt (3) may be used by the caller of
pmdaGetOpt within the argument parsing loop.
DIAGNOSTICS
pmdaGetOpt will display the same error messages as getopt.
CAVEAT
The options -D, -d, -i, -l, -p and -u cannot be reused for other
purposes by the PMDA.
The PMDA must be using PMDA_INTERFACE_2 or later, as specified in the
call to pmdaDSO(3) or pmdaDaemon(3).
SEE ALSO
pmdbg(1), getopt(3), PMAPI(3), PMDA(3), pmdaDaemon(3), pmdaDSO(3) and
pmdaText(3).