netmgr_ndtostr()

Преобразовать дескриптор узла в строку

Прототип:

#include <sys/netmgr.h>
int netmgr_ndtostr( unsigned flags,
int nd,
char *buf,
size_t maxbuf );

Аргументы:

flags
Какую часть (части) полного имени пути (Fully Qualified Node Name, FQPN) настраивать.
nd
Дескриптор узла, который необходимо преобразовать.
buf
Указатель на буфер, в котором функция может разместить преобразованный идентификатор.
maxbuf
Размер буфера.

Библиотека:

libc

Описание:

Функция netmgr_ndtostr() преобразует дескриптор узла nd в строку и сохраняет ее в буфер, на который указывает buf. Размер буфера задается maxbuf.

Дескриптор узла – временный числовой идентификатор удаленного узла.

Аргумент flags определяет, какую часть(и) полного имени пути (FQPN) настраивать. Следующая диаграмма описывает части FQPN, /net/jam.site.ru~preferred:

fqfn_components.png
Рисунок 1. Компоненты полного имени пути

Полное имя пути (FQNN) - jam.site.ru.

Строка по умолчанию, которую создает netmgr_ndtostr() - это FQNN плюс приоритизация трафика (QoS), если она не является значением по умолчанию (~loadbalance). Можно передать эту строку любому другому узлу, который может вызвать netmgr_strtond() и имеет nd, который ссылается на тот же узел с той же приоритизацией трафика.

Поразрядное ИЛИ для flags изменяет строку по умолчанию следующим образом:

ND2S_DIR_HIDE
Никогда не включать директорию.
ND2S_DIR_SHOW
Всегда создавать путь к корневому каталогу (то есть /) узла, определяемого nd. Например, вызов:

netmgr_ndtostr( ND2S_DIR_SHOW, nd, buf, sizeofbuf );

на узле с доменом по умолчанию site.ru, используя nd, который ссылается на FQNN peterv.site.ru, возвращает строку /net/peterv.site.ru/. Если Qnet не активен на узле и для netmgr_ndtostr( ND2S_DIR_SHOW, nd, buf, sizeofbuf ) nd ссылается на ND_LOCAL_NODE, возвращается строка /.

ND2S_DOMAIN_HIDE
Никогда не включать домен.
ND2S_DOMAIN_SHOW
Всегда включать домен.
ND2S_LOCAL_STR
Отображать короткие имена узлов для локального узла. Например, вызов:

netmgr_ndtostr( ND2S_LOCAL_STR, nd, buf, sizeofbuf );

на узле с доменом по умолчанию site.ru, используя nd, который ссылается на FQPN /net/peterv.site.ru, возвращает строку peterv. В то же время, nd, который ссылается на /net/peterv.anotherhost.ru, возвращает peterv.anotherhost.ru.

ND2S_NAME_HIDE
Никогда не включать имя.
ND2S_NAME_SHOW
Всегда включать имя.
ND2S_QOS_HIDE
Никогда не включать приоритизацию трафика (QoS).
ND2S_QOS_SHOW
Всегда включать приоритизацию трафика.
ND2S_SEP_FORCE
Всегда включать начальный разделитель. Например, вызов:

netmgr_ndtostr( ND2S_SEP_FORCE | ND2S_DIR_HIDE |
ND2S_NAME_HIDE| ND2S_DOMAIN_HIDE |
ND2S_QOS_SHOW, nd, buf, sizeofbuf );

с nd, равным ND_LOCAL_NODE, возвращает строку ~loadbalance. Это полезно если требуется объединять каждую часть FQPN по отдельности.


Note: Не используйте ND2S_*_HIDE и соответствующий ND2S_*_SHOW вместе.

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

Длина строки. Если возникла ошибка, функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

ENOTSUP
Qnet не запущен.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <sys/netmgr.h>
int main()
{
int nd1, nd2, nd3, len;
char path1[50] = "/net/dave",
path2[50] = "/net/karen",
buff[100];
nd1 = netmgr_strtond( path1, NULL );
if ( nd1 == -1 )
{
perror( "netmgr_strtond" );
return (EXIT_FAILURE);
} else {
printf ("Node id for %s is %d.\n", path1, nd1);
}
nd2 = netmgr_strtond( path2, NULL );
if ( nd2 == -1 )
{
perror( "netmgr_strtond" );
return (EXIT_FAILURE);
} else {
printf ("Node id for %s is %d.\n", path2, nd2);
}
nd3 = netmgr_remote_nd ( nd2, nd1 );
if ( nd3 == -1 )
{
perror( "netmgr_strtond" );
return (EXIT_FAILURE);
} else {
printf( "Node id for %s, relative to %s, is %d.\n",
path1, path2, nd3 );
}
len = netmgr_ndtostr( ND2S_DIR_HIDE | ND2S_DOMAIN_SHOW |
ND2S_NAME_SHOW | ND2S_QOS_SHOW, nd1, buff, 100 );
if ( len == -1 )
{
perror( "netmgr_ndtostr" );
} else {
printf( "Node name for %d is %s.\n", nd1, buff );
return (EXIT_FAILURE);
}
return (EXIT_SUCCESS);
}

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

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

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

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

ND_NODE_CMP(), netmgr_remote_nd(), netmgr_strtond()




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