#include #include #include /* ------------------------------------------------------------- */ int main(int argc, char *argv[]) { struct xs_handle *xenstore = NULL; xs_transaction_t xst; char *xs_value = NULL, **vec; char *value; unsigned int count; if (NULL == xenstore) { xenstore = xs_daemon_open_readonly(); if (NULL == xenstore) fprintf(stderr,"can't connect to %s\n",xs_daemon_socket_ro()); else printf("connected to %s\n", xs_daemon_socket_ro()); } if (NULL == xenstore) { xenstore = xs_daemon_open(); if (NULL == xenstore) fprintf(stderr,"can't connect to %s\n",xs_daemon_socket()); else printf("connected to %s\n", xs_daemon_socket()); } if (NULL == xenstore) { xenstore = xs_domain_open(); if (NULL == xenstore) fprintf(stderr, "can't connect to %s\n", xs_domain_dev()); else printf("connected to %s\n", xs_domain_dev()); } if (NULL == xenstore) { fprintf(stderr, "can't access xenstore, exiting\n"); exit(1); } xs_watch(xenstore, "/", "token"); for (;;) { vec = xs_read_watch(xenstore, &count); if (NULL == vec) { fprintf(stderr,"xs_read_watch() failed\n"); exit(1); } switch (vec[XS_WATCH_PATH][0]) { case '/': xst = xs_transaction_start(xenstore); if (xst) { xs_value = xs_read(xenstore, xst, vec[XS_WATCH_PATH], NULL); xs_transaction_end(xenstore, xst, 0); if (NULL == xs_value) value = ""; else value = xs_value; } else { value = ""; } break; default: value = ""; break; } printf("%-64s : \"%s\"\n", vec[XS_WATCH_PATH], value); fflush(stdout); if (xs_value) { free(xs_value); xs_value = NULL; } free(vec); } }