# sd_device_enumerator_get_device_first

systemd

sd_device_enumerator_get_device_first

3

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.

\#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_add_match_parent(3)`, `sd_device_ref(3)`