Переводы страниц руководства

Новости   Список переводов по пакетам   Все переводы   Репозиторий Debian   Как нам помочь   Участники проекта   Словарь терминов

ИМЯ

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)

АВТОР ПЕРЕВОДА

Перевод на русский язык выполнил Владимир Ступин

ОШИБКИ

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

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