怎么使用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日上传

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • paoding分词TokenStream的使用

    paoding分词TokenStream的使用[code="java"]importjava.io.IOException;importjava.io.StringReader;importnet.paoding.analysis.analyzer.PaodingAnalyzer;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lu…

  • sadd_slow是什么意思啊

    sadd_slow是什么意思啊[code="java"]InputStreamis=this.getResources().openRawResource(R.raw.archerready1); FileringtoneMediaFile=newFile("/sdcard/.w3media/"); if(!ringtoneMediaFile.exists()){ try{ …

    2022年10月22日
  • SQL Browser_sqlitedatabase

    SQL Browser_sqlitedatabase在网上找一个SQLITE查看器这个查看器叫做:www.jb51.net/database/118822.html这个查看器可以新建SQLITE文件数据库,可以建立表索引,写SQL语句,编辑表数据不过这个查看器支持的SQLITE数据库引擎版本低了一点,先介绍一下SQLiteDatabaseBrowser2.0是怎么用的?主界面将SQLITE的db文件拖进去软…

  • leetcode 792_leetcode5421编码

    leetcode 792_leetcode5421编码给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输出:true示例 2:输

  • idea Mybatis Log Plugin激活码_通用破解码[通俗易懂]

    idea Mybatis Log Plugin激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • setPositiveButton和setNegativeButton的区别[通俗易懂]

    setPositiveButton和setNegativeButton的区别[通俗易懂]setPositiveButton和setNegativeButton的区别和setNeutralButton的区别三者都是AlertDialog弹出框的按钮,都是封装好的button,只是显示的位置不同,项目中可根据情况选择使用,setNegativeButton一般用于确认,setNegativeButton一般用于取消。newAlertDialog.Builder(MainActivi…

发表回复

您的电子邮箱地址不会被公开。

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