大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...