int main(int argc, char *argv[]) { bus_t bus; int i; if (argc < 2) return fprintf(stderr, "USAGE: %s daemon...", *argv), 2; t(bus_open(&bus, getenv("BUS_INIT"), BUS_WRONLY)); for (i = 1; i < argc; i++) { sprintf(arg, "grep '^%s$' < \"${XDG_RUNTIME_DIR}/started-daemons\" >/dev/null", argv[i]); if (WEXITSTATUS(system(arg))) { sprintf(arg, "%ji require %s", (intmax_t)getppid(), argv[i]); t(bus_write(&bus, arg, 0)); } } bus_close(&bus); return 0; fail: perror("require"); bus_close(&bus); return 1; }
int main(int argc, char *argv[]) { GMainLoop *loop; guint bus; loop = g_main_loop_new(NULL, FALSE); bus = g_bus_own_name(G_BUS_TYPE_SYSTEM, "org.freedesktop.login1", G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, on_name_acquired, on_name_lost, loop, NULL); /* create /run/systemd/seats, since that's how GDM checks whether logind is * running - see LOGIND_RUNNING() */ if (-1 == g_mkdir_with_parents("/run/systemd/seats", 0755)) goto cleanup; g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "entering the main loop"); g_main_loop_run(loop); g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "exited the main loop"); cleanup: signals_unsubscribe(); bus_close(); g_main_loop_unref(loop); g_bus_unown_name(bus); return 0; }
int main() { bus_t bus; struct timespec timeout; t(bus_open(&bus, "/tmp/example-bus", BUS_RDONLY)); t(clock_gettime(CLOCK_MONOTONIC, &timeout)); timeout.tv_sec += 10; t(bus_read_timed(&bus, callback, NULL, &timeout, CLOCK_MONOTONIC)); bus_close(&bus); return 0; fail: perror("poll"); bus_poll_stop(&bus); bus_close(&bus); return 1; }
int main(int argc_, char *argv_[]) { bus_t bus; int i; argc = argc_; argv = argv_; if (argc < 2) return fprintf(stderr, "USAGE: %s daemon...", *argv), 2; t(bus_open(&bus, getenv("BUS_INIT"), BUS_RDONLY)); started = calloc(argc, sizeof(char)); t(started == NULL); started[0] = 1; for (i = 1; i < argc; i++) { sprintf(arg, "grep '^%s$' < \"${XDG_RUNTIME_DIR}/started-daemons\" >/dev/null", argv[i]); if (!WEXITSTATUS(system(arg))) { started[i] = 1; } else { sprintf(arg, "grep '^%s$' < \"${XDG_RUNTIME_DIR}/ready-daemons\" >/dev/null", argv[i]); if (!WEXITSTATUS(system(arg))) started[i] = 1; else remaining++; } } if (remaining) bus_read(&bus, callback, NULL); bus_close(&bus); free(started); return 0; fail: perror("await-started"); bus_close(&bus); free(started); return 1; }
int main(int argc, char *argv[]) { bus_t bus; if (argc < 3) return fprintf(stderr, "USAGE: %s state daemon", *argv), 2; t(bus_open(&bus, getenv("BUS_INIT"), BUS_WRONLY)); sprintf(arg, "%ji %s %s", (intmax_t)getppid(), argv[1], argv[2]); t(bus_write(&bus, arg)); t(bus_close(&bus)); return 0; fail: perror("announce"); return 1; }
int main(int argc, char *argv[]) { GMainLoop *loop; guint bus; loop = g_main_loop_new(NULL, FALSE); bus = g_bus_own_name(G_BUS_TYPE_SYSTEM, "org.freedesktop.login1", G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, on_name_acquired, on_name_lost, loop, NULL); /* create /run/systemd/seats, since that's how GDM checks whether logind is * running - see LOGIND_RUNNING() */ if (-1 == g_mkdir_with_parents("/run/systemd/seats", 0755)) goto cleanup; if (-1 == g_mkdir_with_parents("/run/systemd/sessions", 0755)) goto cleanup; /* normally, /run/systemd/multi-session-x contains a file for each session, * but since ConsoleKit's session IDs are D-Bus object paths, they contain / * characeters, so extra sub-directories are required to prevent failure of * mkdir() in LoginKit clients */ if (-1 == g_mkdir_with_parents( "/run/systemd/multi-session-x/org/freedesktop/ConsoleKit", 0755)) goto cleanup; g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "entering the main loop"); g_main_loop_run(loop); g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "exited the main loop"); cleanup: signals_unsubscribe(); bus_close(); g_main_loop_unref(loop); g_bus_unown_name(bus); return 0; }
static void announce_wait(pid_t pid) { bus_t bus; int i; t(bus_open(&bus, getenv("BUS_INIT"), BUS_WRONLY)); for (i = 1; i < argc; i++) { if (!started[i]) { sprintf(arg, "%ji awaiting-started %s", (intmax_t)pid, argv[i]); t(bus_write(&bus, arg, 0)); } } t(bus_close(&bus)); return; fail: perror("await-started"); }
static void on_dlclose(void) { bus_close(); }