Index · Directives · Python · libudev · gudev systemd 220

## Name

sd_event_run, sd_event_loop — Run libsystemd event loop

## Synopsis

    #include <systemd/sd-event.h>

`int sd_event_run(` | sd_event *event,
| uint64_t timeout`)`;

`int sd_event_loop(` | sd_event *event`)`;

## Description

`sd_event_run()` can be used to run one iteration of the event loop of libsystemd. This function waits until an event to process is available and dispatches a handler for it. Parameter `timeout` specifices the maximum time (in microseconds) to wait. `(uint64_t) -1` may be used to specify an infinite timeout.

`sd_event_loop` runs `sd_event_wait` in a loop with a timeout of infinity. This makes it suitable for the main event loop of a program.

The event loop object `event` is created with `sd_event_new`. Events to wait for and their handlers can be registered with `sd_event_add_time`, `sd_event_add_child`, `sd_event_add_signal`, `sd_event_add_defer`, `sd_event_add_exit`, and `sd_event_add_post`.

For more fine-grained control, `sd_event_prepare`, `sd_event_wait`, and `sd_event_dispatch` may be used. Along with `sd_event_get_fd`, those functions make it possible to integrate the libsystemd loop inside of another event loop.

## Return Value

On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style error code. `sd_event_run` returns 0 if the event loop is finished, and a positive value if it can be continued.

## Errors

Returned errors may indicate the following problems:

`-EINVAL`

  Parameter `event` is `NULL`.

`-EBUSY`

  The event loop object is not in the right state (see sd_event_prepare(3) for an explanation of possible states).

`-ESTALE`

  The event loop is already terminated.

`-ECHILD`

  The event loop has been created in a different process.

Other errors are possible too.

## Notes

`sd_event_run()` and `sd_event_loop()` are available as a shared library, which can be compiled and linked to with the `libsystemd` pkg-config(1) file.

## See Also

systemd(1), sd_event_new(3), sd_event_wait(3), sd_event_add_io(3), sd_event_add_time(3), sd_event_add_signal(3), sd_event_add_defer(3), sd_event_add_exit(3), sd_event_add_post(3), GLIb Main Event Loop.