#include <stdio.h> #include <stdlib.h> #include <string.h> #include <libvirt/libvirt.h> #define MAXLEN 1000 char *read_xml_desc(char *xml_desc, int len, FILE *in) { int c; while ((--len > 0) && (c = getc(in)) != EOF) *xml_desc++ = c; *xml_desc = '\0'; return (len >= 0 && c == EOF) ? xml_desc : NULL; } int main(int argc, char *argv[]) { virConnect *conn; virDomain *dom; char *xml; int ret = -1; if (argc != 3) { printf("usage: %s id [--attach|--detach] < mydevice.xml\n", argv[0]); return -1; } conn = virConnectOpen(NULL); if (!conn) return ret; dom = virDomainLookupByID(conn, atoi(argv[1])); if (!dom) return ret; xml = malloc(MAXLEN); if (!xml) goto out; if (!read_xml_desc(xml, MAXLEN, stdin)) goto out; if (strcmp(argv[2], "--attach") == 0) { virDomainAttachDevice(dom, xml); } else if (strcmp(argv[2], "--detach") == 0) { virDomainDetachDevice(dom, xml); } printf(virDomainGetXMLDesc(dom, VIR_DOMAIN_XML_SECURE)); ret = 0; out: free(xml); virDomainFree(dom); virConnectClose(conn); return ret; }