sd_event_run

systemd
Developer Tom Gundersen teg@jklm.no
sd_event_run 3
sd_event_run sd_event_loop Run libsystemd event loop

    #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.