前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎么使用virsh命令_isql命令

怎么使用virsh命令_isql命令

作者头像
全栈程序员站长
发布2022-09-22 18:41:47
5480
发布2022-09-22 18:41:47
举报
文章被收录于专栏:全栈程序员必看

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档