发布一段C代码,用于连接指定的KVM宿主机器,获得该宿主机器的配置信息,以及该主机上所有的虚拟主机列表、状态及配置信息:

#include <stdio.h>
#include <stdlib.h>
#include <libvirt/libvirt.h>

void ListDom(virConnectPtr conn)
{
    char **inactiveDom;
    virDomainPtr *allDom;
    int nInActiveDoms = virConnectNumOfDefinedDomains(conn); 
    allDom = malloc(sizeof(virDomainPtr)* nInActiveDoms);
    int i = 0;
    char str[200];
    virDomainInfo t;
    if(nInActiveDoms != 0)
    {
        printf("inactive num: %d\n",nInActiveDoms);
        inactiveDom = malloc(sizeof(char*) * (nInActiveDoms));
        nInActiveDoms  = virConnectListDefinedDomains(conn , inactiveDom , nInActiveDoms); 
        printf("numOfInactiveDom*************:%d\n", nInActiveDoms);
 
        for(i=0 ; i<nInActiveDoms; i++)
        {
            printf("name:%s\n",inactiveDom[i]);
            allDom[i] = virDomainLookupByName(conn , inactiveDom[i]);
            virDomainGetUUIDString(allDom[i],str);
            printf("uuid:%s | os:%s\n",str,virDomainGetOSType(allDom[i]));   
            virDomainGetInfo(allDom[i],&t);
            printf("HostName:%s\n",virDomainGetName(allDom[i]));
            printf("state:%d|maxmem:%d|memused:%d|cpunum:%d|cputime:%ld\n",t.state,t.maxMem,t.memory,t.nrVirtCpu,t.cpuTime);
          }
    }
}
void ListActiveDom(virConnectPtr conn)
{
    int numOfActiveDom = virConnectNumOfDomains(conn);
    int activeDom[numOfActiveDom];
    virDomainPtr *allDomains;     
    virDomainInfo t;
    int i ;
    char str[200];
    allDomains = malloc(sizeof(virDomainPtr)* numOfActiveDom); 
    numOfActiveDom = virConnectListDomains(conn , activeDom , numOfActiveDom); 
   
    printf("Active Dom: \n"); 
    for(i=0 ; i<numOfActiveDom ; i++){
        printf("id:%d\n",activeDom[i]); 
        allDomains[i] = virDomainLookupByID(conn ,activeDom[i]);  //ͨ¹ýidÈ¡Domain 
        virDomainGetUUIDString(allDomains[i],str);
        printf("uuid:%s | os:%s\n",str,virDomainGetOSType(allDomains[i]));   
        printf("HostName:%s\n",virDomainGetName(allDomains[i]));
        virDomainGetInfo(allDomains[i],&t);
        printf("state:%d|maxmem:%d|memused:%d|cpunum:%d|cputime:%ld\n",t.state,t.maxMem,t.memory,t.nrVirtCpu,t.cpuTime);
    }
}
int main(int argc, char *argv[])
{
    virConnectPtr conn;
    char* caps;
    virNodeInfo nodeinfo;   
    char str[200];
    char *struuid[200];
    int max = 0;
    int i = 0;
    virNodeMemoryStats *pMem;
    int pN[100];
    while(1)
    {
      printf("Input KVM Host:>");
      gets(str);
      printf("\n");
      if(strcmp(str,"quit") == 0)
      {
          printf("Bye-Bye\n");
          exit(0);
      }
      conn = virConnectOpen(str);
      if (conn == NULL) {
          fprintf(stderr, "Failed to open connection to qemu:///system\n");
          continue;
      }
      caps = virConnectGetCapabilities(conn);
      fprintf(stdout, "Capabilities:\n%s\n", caps);
      free(caps);

printf("HostName: %s\n",virConnectGetHostname(conn));
      fprintf(stdout, "Virtualization type: %s\n", virConnectGetType(conn));

virNodeGetInfo(conn, &nodeinfo);
      fprintf(stdout, "Model: %s\n", nodeinfo.model);
      fprintf(stdout, "Memory size: %lukb\n", nodeinfo.memory);
      fprintf(stdout, "Number of CPUs: %u\n", nodeinfo.cpus);
      fprintf(stdout, "MHz of CPUs: %u\n", nodeinfo.mhz);
      fprintf(stdout, "Number of NUMA nodes: %u\n", nodeinfo.nodes);
      fprintf(stdout, "Number of CPU sockets: %u\n", nodeinfo.sockets);
      fprintf(stdout, "Number of CPU cores per socket: %u\n", nodeinfo.cores);
      fprintf(stdout, "Number of CPU threads per core: %u\n", nodeinfo.threads);
    /*  printf("Sysinfor :[%s]\n",virConnectGetSysinfo(conn,0));

pMem = malloc(sizeof(virNodeMemoryStats)* 100);
      virNodeGetMemoryStats(conn,VIR_NODE_MEMORY_STATS_ALL_CELLS,pMem,pN,0);
        for(i = 0; i < 10; i++)
        {
            printf("MEM STAT\n%s - %ld\n",pMem[i].field,pMem[i].value);
        }*/
      ListDom(conn);
      ListActiveDom(conn);
      virConnectClose(conn);
    }
    return 0;
}

执行效果如下:

[root@kvm T]# ./t
Input KVM Host:>qemu+ssh:///system

libvirt API管理hypervisors的更多相关文章

  1. (转)libvirt API的基本概念

    本文摘自:http://blog.sina.com.cn/s/blog_da4487c40102v31i.html libvirt对象 libvirt的对象向外展现了虚拟化环境的所有资源.libvir ...

  2. FREE 开源 API 管理工具等

    最近学习API 管理工具,发现几个不错的东西,记录如下: 1.IBM 收购NODE 厂家  STRONGLOOP 有一产品LOOPBACK,开源,好! 2.apigee  api管理平台 也不错. 3 ...

  3. 论元数据和API管理工具

    公司里面的很多部门都在广泛的采用元数据管理,也采用了公司内部开发的元数据管理工具,有些部门的实施效果一直非常好,而有些部门的效果则差强人意.这个问题,其实和软件系统开发完成进入维护阶段后成本居高不下的 ...

  4. API 管理工具

    API 管理工具 你还苦于无法有效的管理大量的API吗?今天给大家介绍一款API的管理工具.这款工具可以免费使用,虽然中途可能会提示你购买,但并不影响我们的使用. 下载地址: Windows:http ...

  5. Api管理工具(spring-rest-docs)

    对于app开发来说,必须需要有相应的api文档,一般最基础的就是用markdown工具来撰写api文档.当对于开发人员来说,是总会想着寻找更方便撰写,测试,对接前端开发的文档生成的工具. 其实这方面的 ...

  6. API管理平台XXL-API

    <API管理平台XXL-API> 一.简介 1.1 概述 XXL-API是一个简洁易用API管理平台,提供API的"管理"."文档"."M ...

  7. 高效、易用、功能强大的 api 管理平台

    前言导读 实际环境的需求可以说是:只有你没想到,没有实现不了的,征对于目前实际开发.测试.生产等环境中,需要用到各类的接口可达几十.甚至上百个,因此,必须需要一个统一管理的工具平台来统一管理这类接口, ...

  8. 基于python调用libvirt API

    基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...

  9. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

随机推荐

  1. TCP/IP协议原理与应用笔记10:TCP/IP协议族

    1. 协议族视图如下:(这里我们列举重要的,并不是所有的) (1)网络接入层(数据链路层 和 物理层): 通过接入的物理网络的 功能 和 覆盖范围 进行分析划分为: •LANs :局域网(Local ...

  2. ubuntu 连接 mssql <转>

    转自  http://www.sendong.net/thread-90941-1-1.html 在linux下连接MSSQL,因为微软同志没有提供任何接口给开发人员,大约他们认为要用MSSQL的,只 ...

  3. 使用NAT方式连网的linux服务器虚拟机搭建

    从一开始我就很纠结centos服务器搭建的过程. 由于自己方向并不在运维上,但是学习开发也需要用到Linux所以就一直没认真去学. 经过自己多方面摸索与学习找到了自己的一套方法. 首先我用到的是 ce ...

  4. codevs 2495 水叮当的舞步IDA*

    /* 比较简单的A* 估价函数很简单就是除了左上角的联通快之外的不同的个数 加上迭代 好像答案最多在16步之内出解 这样裸裸的交上去是50分 在考虑剪枝 每个选颜色的时候一定是选左上角联通快附近的颜色 ...

  5. 提示用户体验的最佳免费 Jquery 表单插件

    网页表单是一个老生常谈的话题.出于这样或那样的目的,一些示例中都会包括用户注册,电子商务结算,用户设置甚至联系人表格.而输入栏是非常容易用现代的CSS3技术来应用样式.但是到底什么决定整体用户体验? ...

  6. 【转载】ASP.NET线程安全与静态变量的生命周期浅谈

    ASP.NET线程安全所涉及的是什么呢?让我们先来看看静态变量的生命周期问题,下面是我理解的静态变量的生命周期: void Application_Start开始 void Application_E ...

  7. 黑马程序员-for和foreach

    class Program { static void Main(string[] args) { Console.WriteLine("***第一种情况****************** ...

  8. Android 巧妙实现图片和文字布局

    之前写过一个博客是关于实现图片和文字左右或者上下布局的方法, 下面是博客的主要内容: 布局文件很简单,用来展示RadioButton的使用方法. 1 <?xml version="1. ...

  9. 【USACO 2.1.5】海明码

    [题目描述] 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个 ...

  10. 13 Roman to Integer(罗马数字转int Easy)

    题目意思:罗马数字转int 思路:字符串从最后一位开始读,IV:+5-1 class Solution { public: int romanToInt(string s) { map<char ...