使用libvirt API在C程序中获取KVM VM域名

时间:2014-06-07 19:58:40

标签: c qemu kvm libvirt

我正在写一个C程序,我想获得KVM VM的域名。有一个简单的方法吗?我有机器的VM ID,可以获得指向virDomainInfo结构的指针。我知道我可以使用命令virsh domname <id>来完成它,但我似乎无法找到libvirt API,所以我可以通过编程方式完成它。经过一番挖掘后,我找到了virDomain的结构信息。从那里抓住它会是一个选择吗?

struct _virDomain {
   virObject object;
   virConnectPtr conn;                  /* pointer back to the connection */
   char *name;                          /* the domain external name */
   int id;                              /* the domain ID */
   unsigned char uuid[VIR_UUID_BUFLEN]; /* the domain unique identifier */
 };

下面是我正在使用的代码。

virConnectPtr conn = virConnectOpen(connString);
virDomainPtr domainPtr = virDomainLookupByID(conn, vmid);

不知道从哪里开始。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

浏览我发现的virDomainGetName libvirt API,看起来它可能正是您想要的:

  

virDomainGetName

     

const char * virDomainGetName(virDomainPtr domain)

     

获取该域的公共名称

     

域       域对象返回       指向名称或NULL的指针,该字符串无需解除分配,其生命周期将与域对象相同。

我一起通过一些示例代码:

  int main(int argc, char **argv) {
          virConnectPtr c;
          virDomainPtr d;
          char *name;

          c = virConnectOpen(NULL);
          d = virDomainLookupByID(c, 2);
          name = virDomainGetName(d);

          printf("name of domain %d is %s\n", 2, name);
          return 0;
  }