---
name: "sd_device_enumerator_get_device_first"
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_device_enumerator_get_device_first"
---

# sd\_device\_enumerator\_get\_device\_first(3)

Enumerates devices and get the first or next device.

## NAME

sd\_device\_enumerator\_get\_device\_first, sd\_device\_enumerator\_get\_device\_next, sd\_device\_enumerator\_get\_subsystem\_first, sd\_device\_enumerator\_get\_subsystem\_next - Enumerates devices and get the first or next device.

## SYNOPSIS

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

**sd\_device \*sd\_device\_enumerator\_get\_device\_first(sd\_device\_enumerator \****enumerator***);**

**sd\_device \*sd\_device\_enumerator\_get\_device\_next(sd\_device\_enumerator \****enumerator***);**

**sd\_device \*sd\_device\_enumerator\_get\_subsystem\_first(sd\_device\_enumerator \****enumerator***);**

**sd\_device \*sd\_device\_enumerator\_get\_subsystem\_next(sd\_device\_enumerator \****enumerator***);**

## DESCRIPTION

The **sd\_device\_enumerator\_get\_device\_first()** function enumerates all matching devices under /sys/bus/*SUBSYSTEM*/devices/ and /sys/class/*SUBSYSTEM*/devices/, and returns a pointer to the first **sd\_device** object. If no devices are found, **NULL** is returned.

The **sd\_device\_enumerator\_get\_device\_next()** function returns the pointer to the next **sd\_device** from the *enumerator*. It should be called after **sd\_device\_enumerator\_get\_device\_first()** or after a previous call to this function. If no more devices are available, **NULL** is returned.

The **sd\_device\_enumerator\_get\_subsystem\_first()** function enumerates all matching subsystem devices in /sys/module/, /sys/bus/, and /sys/bus/*SUBSYSTEM*/drivers/ (such as /sys/bus/pci/drivers/). It returns a pointer to the first **sd\_device** object. If no devices are found **NULL** is returned. Note that this does *not* enumerate devices provided by **sd\_device\_enumerator\_get\_device\_first/next()**. Hence, e.g. /sys/bus/pci/, /sys/bus/pci/drivers/ahci/ and so on are enumerated, but /sys/bus/pci/devices/0000:00:00.0/ and so on are not.

The **sd\_device\_enumerator\_get\_subsystem\_next()** function returns the next subsystem device from the enumerator. It should be called after **sd\_device\_enumerator\_get\_subsystem\_first()** or after a previous call to this function. If no more subsystem devices are available, **NULL** is returned.

## RETURN VALUE

On success, these functions return a pointer to an **sd\_device** object. On failure or when no more devices are available, **NULL** is returned. The returned pointers are owned by the enumerator and should not be freed by the caller.

## HISTORY

**sd\_device\_enumerator\_get\_device\_first()**, **sd\_device\_enumerator\_get\_device\_next()**, **sd\_device\_enumerator\_get\_subsystem\_first()**, and **sd\_device\_enumerator\_get\_subsystem\_next()** were introduced in systemd version 240.

## SEE ALSO

[**sd\_device\_enumerator\_new**(3)](/sd_device_enumerator_new/3.md), [**sd\_device\_enumerator\_add\_match\_parent**(3)](/sd_device_enumerator_add_match_parent/3.md), [**sd\_device\_ref**(3)](/sd_device_ref/3.md)
