怎么使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java String 如何加双引号

    Java String 如何加双引号Java String 如何加双引号

    2022年4月23日
    47
  • goland 激活码2021【永久激活】

    (goland 激活码2021)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~V…

    2022年3月22日
    508
  • java linkedhashset_Java LinkedHashSet「建议收藏」

    java linkedhashset_Java LinkedHashSet「建议收藏」JavaLinkedHashSet1什么是JavaLinkedHashSetJavaLinkedHashSet类实现了Set接口。并且HashSet的子类。关于JavaLinkedHashSet类的核心要点是:JavaLinkedHashSet类不能存储重复元素,和HashSet相似。JavaLinkedHashSet类提供所有Set接口的操作,并允许空元素。JavaLinkedH…

    2022年10月12日
    0
  • python中dtype什么意思_NumPy Python中的数据类型对象(dtype)

    python中dtype什么意思_NumPy Python中的数据类型对象(dtype)每个ndarray都有一个关联的数据类型(dtype)对象。此数据类型对象(dtype)告知我们有关数组布局的信息。这意味着它为我们提供了有关以下信息:数据类型(整数,浮点数,Python对象等)数据大小(字节数)数据的字节顺序(小端或大端)ndarray的值存储在缓冲区中,可以将其视为内存字节的连续块。因此,如何解释这些字节由dtype对象给出。1,构造数据类型(dtype)对象:数据类型对象…

    2022年6月5日
    101
  • kafka 集群运维和使用「建议收藏」

    kafka 集群运维和使用「建议收藏」最近在维护kafka集群,遇到了很多问题都需要记录下,1. kafka的topic级别的配置修改

    2022年5月29日
    27
  • android studio快捷键集合[通俗易懂]

    \itemCtrl+P  查看变量参数信息,也就是看变量是哪种类型  \item Ctrl+B  查找该变量的定义位置。  \item Ctrl+Q  查找快速文档,即在另外一个窗口中打开其声明  \item Alt+Shift+C  查看工程最近更改的地方  \item Ctrl+space  自动完成代码  \item Ctrl+shift+Enter  自动填充表达式

    2022年3月10日
    39

发表回复

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

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