---
name: "sd_event_now"
section: "3"
platform: "linux"
package: "systemd-libs"
version: "262.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sd_event_now"
---

# sd\_event\_now(3)

Retrieve current event loop iteration timestamp

## NAME

sd\_event\_now - Retrieve current event loop iteration timestamp

## SYNOPSIS

```
#include <systemd/sd-event.h>
```

**int sd\_event\_now(sd\_event \****event***, clockid\_t** *clock***, uint64\_t \****ret***);**

## DESCRIPTION

**sd\_event\_now()** returns the time when the most recent event loop iteration began. A timestamp is taken right after returning from the event sleep, and before dispatching any event sources. The *event* parameter specifies the event loop object to retrieve the timestamp from. The *clock* parameter specifies the clock to retrieve the timestamp for, and is one of **CLOCK\_REALTIME** (or equivalently **CLOCK\_REALTIME\_ALARM**), **CLOCK\_MONOTONIC**, or **CLOCK\_BOOTTIME** (or equivalently **CLOCK\_BOOTTIME\_ALARM**), see [**clock\_gettime**(2)](/clock_gettime/2.md) for more information on the various clocks. The retrieved timestamp is stored in the *ret* parameter, in μs since the clock's epoch. If this function is invoked before the first event loop iteration, the current time is returned, as reported by **clock\_gettime()**. To distinguish this case from a regular invocation the return value will be positive, and zero when the returned timestamp refers to an actual event loop iteration.

## RETURN VALUE

If the first event loop iteration has not run yet **sd\_event\_now()** writes current time to *ret* and returns a positive return value. Otherwise, it will write the requested timestamp to *ret* and return 0. On failure, the call returns a negative errno-style error code.

### Errors

Returned values may indicate the following problems:

**-EINVAL**

An invalid parameter was passed.

**-EOPNOTSUPP**

Unsupported clock type.

**-ECHILD**

The event loop object was created in a different process, library or module instance.

## NOTES

Functions described here are available as a shared library, which can be compiled against and linked to with the **libsystemd** [**pkg-config**(1)](/pkg-config/1.md) file.

All functions listed here are thread-agnostic and only a single thread may operate on a given object at any given time. Different threads may access the same object at different times. Multiple independent objects may be used from different threads in parallel.

The code described here uses [**getenv**(3)](/getenv/3.md), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/setenv/3.md) from a parallel thread. It is recommended to only do calls to **setenv()** from an early phase of the program when no other threads have been started.

## HISTORY

**sd\_event\_now()** was added in version 229.

## SEE ALSO

[**systemd**(1)](/systemd/1.md), [**sd-event**(3)](/sd-event/3.md), [**sd\_event\_new**(3)](/sd_event_new/3.md), [**sd\_event\_add\_time**(3)](/sd_event_add_time/3.md), [**clock\_gettime**(2)](/clock_gettime/2.md)
