nng_opts_parse(3supp)
| NNG_OPTS_PARSE(3supp) | NNG Reference Manual | NNG_OPTS_PARSE(3supp) |
NAME
nng_opts_parse - parse command line options
SYNOPSIS
#include <nng/nng.h>
#include <nng/supplemental/util/options.h>
typedef struct nng_optspec {
const char *o_name; // Long style name (may be NULL for short only)
int o_short; // Short option (no clustering!)
int o_val; // Value stored on a good parse (>0)
bool o_arg; // Option takes an argument if true
} nng_optspec;
int nng_opts_parse(int argc, char *const *argv, const nng_optspec *spec, int *val, char **arg, int *idx);
DESCRIPTION
The nng_opts_parse() is function is a supplemental function intended to facilitate parsing command line arguments. This function exists largely to stand in for getopt() from POSIX systems, but it is available everywhere that NNG is, and it includes some capabilities missing from getopt().
The function parses arguments from main() (using argc and argv), starting at the index referenced by idx. (New invocations typically set the value pointed to by idx to 1.)
Options are parsed as specified by spec (see Option Specification.) The value of the parsed option will be stored at the address indicated by val, and the value of idx will be incremented to reflect the next option to parse.
Tip
For using this to parse command-line like strings that do not
include
the command name itself, set the value referenced by idx to zero
instead of one.
If the option had an argument, a pointer to that is returned at the address referenced by arg.
This function should be called repeatedly, until it returns either -1 (indicating the end of options is reached) or a non-zero error code is returned.
Option Specification
The calling program must first create an array of nng_optspec structures describing the options to be supported. This structure has the following members:
o_name
o_short
o_val
o_arg
Long Options
Long options are parsed from the argv array, and are indicated when the element being scanned starts with two dashes. For example, the "verbose" option would be specified as --verbose on the command line. If a long option takes an argument, it can either immediately follow the option as the next element in argv, or it can be appended to the option, separated from the option by an equals sign (=) or a colon (:).
Short Options
Short options appear by themselves in an argv element, prefixed by a dash (-). If the short option takes an argument, it can either be appended in the same element of argv, or may appear in the next argv element.
Note
Option clustering, where multiple options can be crammed together
in
a single argv element, is not supported by this function (yet).
Prefix Matching
When using long options, the parser will match if it is equal to a prefix of the o_name member of a option specification, provided that it do so unambiguously (meaning it must not match any other option specification.)
EXAMPLE
The following program fragment demonstrates this function.
enum { OPT_LOGFILE, OPT_VERBOSE };
char *logfile; // options to be set
bool verbose;
static nng_optspec specs[] = {
{
.o_name = "logfile",
.o_short = 'D',
.o_val = OPT_LOGFILE,
.o_arg = true,
}, {
.o_name = "verbose",
.o_short = 'V',
.o_val = OPT_VERBOSE,
.o_arg = false,
}, {
.o_val = 0; // Terminate array
}
};
for (int idx = 1;;) {
int rv, opt;
char *arg;
rv = nng_opts_parse(argc, argv, specs, &opt, &arg, &idx);
if (rv != 0) {
break;
}
switch (opt) {
case OPT_LOGFILE:
logfile = arg;
break;
case OPT_VERBOSE:
verbose = true;
break;
}
}
if (rv != -1) {
printf("Options error: %s\n", nng_strerror(rv));
exit(1);
}
RETURN VALUES
This function returns 0 if an option parsed correctly, -1 if no more options are available to be parsed, or an error number otherwise.
ERRORS
NNG_EAMBIGUOUS
NNG_ENOARG
NNG_EINVAL
SEE ALSO
nng_strerror(3), nng(7)
| 2026-06-29 |
