rsrcdbmgr_query_name()

Запросить базу данных ресурсов

Прототип:

#include <sys/rsrcdbmgr.h>
#include <sys/rsrcdbmsg.h>
int rsrcdbmgr_query_name( rsrc_alloc_t *list,
int listcnt,
int start,
pid_t pid,
char *name,
unsigned type );

Аргументы:

list
NULL, или массив структур rsrc_alloc_t, котоыре функция может заполнять информацией о найденных ресурсах. Для получения дополнительной информации см. докуменатцию по rsrcdbmgr_create().
listcnt
Количество элементов массива.
start
Индекс, с которого требуется начать поиск.
pid
Какие блоки запрашивать:
name
Имя ресурса для запроса. Для получения дополнительной информации см. rsrcdbmgr_attach().
type
Подтип для запроса; 0 или один из следующих:
RSRCDBMGR_DMA_CHANNEL
канал DMA
RSRCDBMGR_IO_PORT
адрес порта ввода/вывода
RSRCDBMGR_IRQ
адрес прерывания
RSRCDBMGR_MEMORY
адрес памяти
RSRCDBMGR_PCI_MEMORY
адрес памяти PCI

Библиотека:

libc

Описание:

Функция rsrcdbmgr_query_name() запрашивает в базе данных количество listcnt используемых ресурсов типа type, начиная с индекса start. Если выполнить запрос с list, отличным от NULL, тогда функция сохраняет максимум найденных ресурсов listcnt в массиве.

Возвращаемое значение:

Если list имеет значение NULL или listcnt равен 0, функция возвращает количество ресурсов типа type в базе данных.

Если list не равен NULL, то функция возвращает количество ресурсов типа type, доступных в системе.

В случае возникновения ошибки, функция возвращает -1 и устанавливает errno.

Коды ошибок:

EINVAL
Некорректный аргумент.
ENOMEM
Недостаточно памяти для размещения внутренних структур данных.

Примеры:

Перечислить все блоки ресурсов памяти, доступные в системе:

rsrc_alloc_t list[20];
int size, count = 0, start = 0;
while ( 1 )
{
count = rsrcdbmgr_query_name( list, 20, start, -1, "memory", 0 );
if ( count == -1 )
break;
/* In case more than 20 blocks were returned. */
size = min( count-start, 20 );
printf( "Retrieved %d of a possible %d resource blocks", size, count );
for ( count = 0; count < size; count++ )
{
printf( "RSRC[%d] Start %d End %d \n", start + count,
list[count].start, list[count].end );
}
start += size; /* Loop again, in case there are more than 20 blocks. */
}

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

rsrc_alloc_t, rsrcdbmgr_attach()




Предыдущий раздел: Описание API системной библиотеки