man devinfo(3) - библиотека для обработки информации об устройствах и ресурсах

Michael Smith, “man devinfo(3) - device and resource information utility library”, public translation into Russian from English More about this translation.

Translate into another language.

ИМЯ

devinfo, devinfo_init, devinfo_free, devinfo_handle_to_device, devinfo_handle_to_resource, devinfo_handle_to_rman, devinfo_foreach_device_child, devinfo_foreach_device_resource, devinfo_foreach_rman_resource, devinfo_foreach_rman - библиотека для обработки информации об устройствах и ресурсах

БИБЛИОТЕКА

Библиотека для обработки информации об устройствах и ресурсах (libdevinfo, -ldevinfo)

ОБЗОР

#include <devinfo.h>

int devinfo_init(void);

void devinfo_free(void);

struct devinfo_dev * devinfo_handle_to_device(devinfo_handle_t handle);

struct devinfo_res * devinfo_handle_to_resource(devinfo_handle_t handle);

struct devinfo_rman * devinfo_handle_to_rman(devinfo_handle_t handle);

int devinfo_foreach_device_child(struct devinfo_dev *parent, int (*fn)(struct devinfo_dev *child, void *arg), void *arg);

int devinfo_foreach_device_resource(struct devinfo_dev *dev, int (*fn)(struct devinfo_dev *dev, struct devinfo_res *res, void *arg), void *arg);

int devinfo_foreach_rman_resource(struct devinfo_rman *rman, int (*fn)(struct devinfo_res *res, void *arg), void *arg);

int devinfo_foreach_rman(int (*fn)(struct devinfo_rman *rman, void *arg), void *arg);

ОПИСАНИЕ

Библиотека devinfo предоставляет доступ к внутренней иерархии устройств ядра и менеджера ресурсов ввода-вывода. Библиотека использует интерфейс sysctl(3) для получения снимка состояния ядра, который затем может быть доступен приложениям.

Фактически эта информация может быть логически сгруппирована различными способами, библиотека не пытается навязывать какую-либо структуру данных.

Информация об устройствах, ресурсах и менеджере ресурсов возвращается в структурах данных определённых в <devinfo.h>:

struct devinfo_dev {

devinfo_handle_t dd_handle; /* дескриптор устройства */

devinfo_handle_t dd_parent; /* родительское устройство */

char *dd_name; /* имя устройства */

char *dd_desc; /* описание устройства */

char *dd_drivername; /* имя присоединённого драйвера */

char *dd_pnpinfo; /* информация pnp от родительской шины */

char *dd_location; /* где устройство по мнению шины */

uint32_t dd_devflags; /* API-флаги */

uint16_t dd_flags; /* внутренние флаги устройства */

device_state_t dd_state; /* состояние присоединения устройства */

};

struct devinfo_rman {

devinfo_handle_t dm_handle; /* дескриптор менеджера ресурсов */

u_long dm_start; /* начало ресурса */

u_long dm_size; /* размер ресурса */

char *dm_desc; /* описание ресурса */

};

struct devinfo_res {

devinfo_handle_t dr_handle; /* дескриптор ресурса */

devinfo_handle_t dr_rman; /* дескриптор менеджера ресурсов */

devinfo_handle_t dr_device; /* принадлежность устройства */

u_long dr_start; /* начало области */

u_long dr_size; /* размер области */

};

Значения devinfo_handle_t могут использоваться для поиска структур по соответствующим ссылкам.

devinfo_init() создаёт снимок состояния устройств и ресурсов внутри ядра . Она возвращает ненулевой результат если после нескольких последовательных попыток снимок не может быть получен. devinfo_init() должна вызываться перед использованием любых других функций.

devinfo_free() возвращает память, связанную со снимком. Любые указатели возвращённые другими функциями после этого становятся неправильными, и перед использованием других функций снова должна быть вызвана devinfo_init().

devinfo_handle_to_device(), devinfo_handle_to_resource() и devinfo_handle_to_rman() возвращают указатели на структуры соответственно devinfo_dev, devinfo_res и devinfo_rman, основываясь на переданном им devinfo_handle_t. Эти функции могут использоваться для обхода дерева с любого узла до любого другого. Если devinfo_handle_to_device() передать константу DEVINFO_ROOT_DEVICE, функция вернёт дескриптор корня дерева устройств.

devinfo_foreach_device_child() вызывает callback-функцию указанную аргументом fn для каждого устройства являющегося непосредственным потомком. Функции fn также передаётся аргумент, позволяющий обработать состояние в callback-функции. Если fn возвращает ненулевое значение ошибки, обход останавливается и devinfo_foreach_device_child() возвращает значение ошибки той функции, которая её вызвала.

devinfo_foreach_device_resource() вызывает callback-функцию указанную аргументом fn для каждого ресурса, которым владеет устройство. Функции fn также передаётся устройство и аргумент, позволяющий обработать состояние в callback-функции. Если fn возвращает ненулевое значение ошибки, обход останавливается и devinfo_foreach_device_resource() возвращает значение ошибки той функции, которая её вызвала.

devinfo_foreach_rman_resource() вызывает callback-функцию указанную аргументом fn для каждого ресурса в пределах менеджера ресурсов rman. Функции fn также передаётся аргумент, позволяющий обработать состояние в callback-функции. Если fn возвращает ненулевое значение ошибки, обход останавливается и devinfo_foreach_rman_resource() возвращает значение ошибки той функции, которая её вызвала.

devinfo_foreach_rman() вызывает callback-функцию указанную аргументом fn для каждого менеджера ресурсов. Функции fn также передаётся аргумент, позволяющий обработать состояние в callback-функции. Если fn возвращает ненулевое значение ошибки, обход останавливается и devinfo_foreach_rman() возвращает значение ошибки той функции, которая её вызвала.

СМОТРИ ТАКЖЕ

devstat(3)

ИСТОРИЯ

Библиотека devinfo появилась в FreeBSD 5.0 и была импортирована в DragonFly 1.11.

АВТОРЫ

Майкл Смит (Michael Smith) <msmith@FreeBSD.org>

ОШИБКИ

Это первая реализация библиотеки, и интерфейс всё ещё нуждается в переработке.

Интерфейс не сообщает классы устройства или драйвера, делая тяжелой сортировку по классу или драйверу.

Original (English): man devinfo(3) - device and resource information utility library

Translation: © Владимир Ступин .

translated.by crowd

Like this translation? Share it or bookmark!