怎么使用virsh命令_isql命令

怎么使用virsh命令_isql命令virsh.c中main->vshParseArgv->vshCommandArgvParse->vshCommandParse->vshCmddefSearchintmain(intargc,char**argv){if(!vshParseArgv(ctl,argc,argv)){vshDeinit(ctl);exit(EXIT_FAILURE);}staticboolvshParseA…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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.net/169806.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月11日 下午10:36
下一篇 2022年8月11日 下午10:36


相关推荐

  • python和java哪个更值得学 知乎_学完python再学java

    python和java哪个更值得学 知乎_学完python再学java​在编程界经常会引发一个讨论,就是python和Java哪个更值得学,Java语言具有跨平台的特性,在应用范围上有许多选择的余地,而Python在这几年的火热程度丝毫没有减退。个人观点,看学习的目的

    2025年6月19日
    3
  • 星辰MaaS平台数据集格式说明

    星辰MaaS平台数据集格式说明

    2026年3月14日
    1
  • 使用mshta.exe绕过应用程序白名单

    使用mshta.exe绕过应用程序白名单今天,我们将学习有关HTA攻击的不同方法。HTA是有用且重要的攻击,因为它可以绕过应用程序白名单。在上一篇文章中,我们讨论了“WindowsApplocker策略-入门指南”,因为它们定义了应用

    2022年7月1日
    22
  • 网页之定时器详解

    网页之定时器详解nbsp nbsp nbsp nbsp nbsp nbsp nbsp 在网页的特效制作中 经常要用到定时器 比如 间隔一定时间后页面自动跳转 或者间隔一定时间出现某种效果等等 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 若要页面定时跳转 简单的可以在 head 头部的 meta 标记中设定重定向就可以了 但我要说的是 javascript 中的定时器 它的功能是十分强大和有用的 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 在 javascript 中有两个关于定时器的函数 它们是 nbsp nbsp 1 倒计定时器 timenam

    2026年3月17日
    2
  • layui弹出层弹出另一个页面[通俗易懂]

    layui弹出层弹出另一个页面[通俗易懂]layer.open({type:2,skin:’layui-layer-demo’,//样式类名title:’标题’,closeBtn:0,//不显示关闭按钮anim:2,area:[‘893px’,’60…

    2022年6月14日
    227
  • CSGO开箱网站大全_csgo哪个开箱网站能直接取

    CSGO开箱网站大全_csgo哪个开箱网站能直接取csgo开箱网站有哪些?csgo开箱网站大全##以下国内知名CSGO开箱网站官网直达链接优惠码/推广码网站状态incsgocsgogo直接取回skinsdogcsgogo直接取回88skinscsgo直接取回skskinscsgogo直接取回npskinscsgogo直接取回fateskinscsgo直接取回yskins暂无可取回coolkaixiangcsgo直接取回piggycasecsgogo

    2022年10月6日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号