Command-line Interface (CLI)#
The libxnvme_cli.h module provides functionality for creating command-line interfaces for xNVMe related applications. Most xNVMe examples, tools, and tests use this module to offer a coherent command-line interface, complete with bash completion scripts and man pages.
Usage Example#
Below is a brief example using excerpts from the source code of
the xnvme CLI tool. Notice how the
sub-command (sub_info
) is implemented as a function, added to the g_subs
array, integrated into the CLI setup in g_cli
, and utilized when running the
CLI with xnvme_cli_run()
.
Note
Setting the XNVME_CLI_INIT_DEV_OPEN
option will automatically open a device handle.
#include <libxnvme.h>
static int
sub_info(struct xnvme_cli *cli)
{
struct xnvme_dev *dev = cli->args.dev;
int err;
err = xnvme_dev_derive_geo(dev);
if (err) {
XNVME_DEBUG("FAILED: xnvme_dev_derive_geo(), err: %d", err);
return err;
}
xnvme_dev_pr(dev, XNVME_PR_DEF);
return 0;
}
},
},
{
"enum",
"Enumerate devices on the system",
sub_idfy,
{
{XNVME_CLI_OPT_POSA_TITLE, XNVME_CLI_SKIP},
{XNVME_CLI_OPT_URI, XNVME_CLI_POSA},
{XNVME_CLI_OPT_NON_POSA_TITLE, XNVME_CLI_SKIP},
{XNVME_CLI_OPT_CNS, XNVME_CLI_LREQ},
{XNVME_CLI_OPT_CNTID, XNVME_CLI_LOPT},
{XNVME_CLI_OPT_NSID, XNVME_CLI_LOPT},
{XNVME_CLI_OPT_SETID, XNVME_CLI_LOPT},
{XNVME_CLI_OPT_UUID, XNVME_CLI_LOPT},
{XNVME_CLI_OPT_DATA_OUTPUT, XNVME_CLI_LOPT},