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

static void printDomain(virConnect *conn, int id)
{
  virDomain *dom;

  dom = virDomainLookupByID(conn, id);
  printf("%d\t %s\t %lu\n", virDomainGetID(dom), virDomainGetName(dom),
         virDomainGetMaxMemory(dom) / 1024);
  virDomainFree(dom);
}

static void printDomains(virConnect *conn)
{
  int number_of_domains, id, *ids;

  number_of_domains = virConnectNumOfDomains(conn);
  ids = malloc(number_of_domains * sizeof(int));
  if (!ids)
    return;

  virConnectListDomains(conn, ids, number_of_domains);

  printf("ID\t Name\t\t Memory\n");
  for (id = 0; id < number_of_domains; id++)
    printDomain(conn, ids[id]);

  free(ids);
}

int main()
{
  virConnect *conn;

  conn = virConnectOpen(NULL);
  if (!conn)
    return -1;

  printDomains(conn);
  virConnectClose(conn);
  return 0;
}