]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/print-unit-path.c
man: fix link markup
[thirdparty/systemd.git] / man / print-unit-path.c
CommitLineData
cfe8ee46
ZJS
1#include <stdio.h>
2#include <string.h>
3#include <unistd.h>
4#include <sys/types.h>
5
6#include <systemd/sd-bus.h>
7#define _cleanup_(f) __attribute__((cleanup(f)))
8
9/* This is equivalent to:
10 * busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 \
11 * org.freedesktop.systemd1.Manager GetUnitByPID $$
12 *
13 * Compile with 'cc -lsystemd print-unit-path.c'
14 */
15
16#define DESTINATION "org.freedesktop.systemd1"
17#define PATH "/org/freedesktop/systemd1"
18#define INTERFACE "org.freedesktop.systemd1.Manager"
19#define MEMBER "GetUnitByPID"
20
21static int log_error(int error, const char *message) {
22 fprintf(stderr, "%s: %s\n", message, strerror(-error));
23 return error;
24}
25
26static int print_unit_path(sd_bus *bus) {
27 _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
28 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
29 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
30 int r;
31
32 r = sd_bus_message_new_method_call(bus, &m,
33 DESTINATION, PATH, INTERFACE, MEMBER);
34 if (r < 0)
35 return log_error(r, "Failed to create bus message");
36
37 r = sd_bus_message_append(m, "u", (unsigned) getpid());
38 if (r < 0)
39 return log_error(r, "Failed to append to bus message");
40
41 r = sd_bus_call(bus, m, -1, &error, &reply);
42 if (r < 0)
43 return log_error(r, "Call failed");
44
45 const char *ans;
46 r = sd_bus_message_read(reply, "o", &ans);
47 if (r < 0)
48 return log_error(r, "Failed to read reply");
49
50 printf("Unit path is \"%s\".\n", ans);
51
52 return 0;
53}
54
55int main(int argc, char **argv) {
56 _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
57 int r;
58
59 r = sd_bus_open_system(&bus);
60 if (r < 0)
61 return log_error(r, "Failed to acquire bus");
62
63 print_unit_path(bus);
64}