怎么使用virsh命令_isql命令

2022-09-22 18:41:47 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

virsh.c中 main-> vshParseArgv-> vshCommandArgvParse-> vshCommandParse-> vshCmddefSearch

int main(int argc, char **argv) { if (!vshParseArgv(ctl, argc, argv)) { vshDeinit(ctl); exit(EXIT_FAILURE); }

static bool vshParseArgv(vshControl *ctl, int argc, char **argv) { if (argc > optind) { /* parse command */ ctl->imode = false; if (argc – optind == 1) { vshDebug(ctl, VSH_ERR_INFO, “commands: ”%s”n”, argv[optind]); return vshCommandStringParse(ctl, argv[optind]); } else { return vshCommandArgvParse(ctl, argc – optind, argv optind); } }

static bool vshCommandArgvParse(vshControl *ctl, int nargs, char **argv) { vshCommandParser parser;

if (nargs <= 0) return false;

parser.arg_pos = argv; parser.arg_end = argv nargs; parser.getNextArg = vshCommandArgvGetArg; return vshCommandParse(ctl, &parser); }

static bool vshCommandParse(vshControl *ctl, vshCommandParser *parser) { if (cmd == NULL) { /* first token must be command name */ if (!(cmd = vshCmddefSearch(tkdata))) {

static const vshCmdGrp cmdGroups[] = { {VSH_CMD_GRP_DOM_MANAGEMENT, “domain”, domManagementCmds}, {VSH_CMD_GRP_DOM_MONITORING, “monitor”, domMonitoringCmds}, {VSH_CMD_GRP_HOST_AND_HV, “host”, hostAndHypervisorCmds}, {VSH_CMD_GRP_IFACE, “interface”, ifaceCmds}, {VSH_CMD_GRP_NWFILTER, “filter”, nwfilterCmds}, {VSH_CMD_GRP_NETWORK, “network”, networkCmds}, {VSH_CMD_GRP_NODEDEV, “nodedev”, nodedevCmds}, {VSH_CMD_GRP_SECRET, “secret”, secretCmds}, {VSH_CMD_GRP_SNAPSHOT, “snapshot”, snapshotCmds}, {VSH_CMD_GRP_STORAGE_POOL, “pool”, storagePoolCmds}, {VSH_CMD_GRP_STORAGE_VOL, “volume”, storageVolCmds}, {VSH_CMD_GRP_VIRSH, “virsh”, virshCmds}, {NULL, NULL, NULL} };

domManagementCmds

static const vshCmdDef domManagementCmds[] = { {“define”, cmdDefine, opts_define, info_define, 0},

返回vshCmdDef cmd = domManagementCmds

static bool vshParseArgv(vshControl *ctl, int argc, char **argv) { if (argc > optind) { /* parse command */ ctl->imode = false; if (argc – optind == 1) { vshDebug(ctl, VSH_ERR_INFO, “commands: ”%s”n”, argv[optind]); return vshCommandStringParse(ctl, argv[optind]);

int main(int argc, char **argv) {

if (!vshInit(ctl)) { vshDeinit(ctl); exit(EXIT_FAILURE); }

if (!ctl->imode) { ret = vshCommandRun(ctl, ctl->cmd);

static bool vshCommandRun(vshControl *ctl, const vshCmd *cmd) { while (cmd) { struct timeval before, after; bool enable_timing = ctl->timing;

if ((ctl->conn == NULL || disconnected) && !(cmd->def->flags & VSH_CMD_FLAG_NOCONNECT)) vshReconnect(ctl);

if (enable_timing) GETTIMEOFDAY(&before);

ret = cmd->def->handler(ctl, cmd);

define 调用cmdDefine static bool cmdDefine(vshControl *ctl, const vshCmd *cmd) { dom = virDomainDefineXML(ctl->conn, buffer);

virDomainPtr virDomainDefineXML(virConnectPtr conn, const char *xml) { /* add by c00165101 end */ if (conn->driver->domainDefineXML) { virDomainPtr ret; ret = conn->driver->domainDefineXML (conn, xml); 指向xen_driver.c中 static virDomainPtr xenUnifiedDomainDefineXML (virConnectPtr conn, const char *xml) { GET_PRIVATE(conn); int i; virDomainPtr ret;

for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; i) if (priv->opened[i] && drivers[i]->xenDomainDefineXML) { ret = drivers[i]->xenDomainDefineXML (conn, xml); if (ret) return ret; }

return NULL; }

2013年5月23日上传

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169806.html原文链接:https://javaforall.cn

0 人点赞