Преобразовать дескриптор узла в строку
#include <sys/netmgr.h>int netmgr_ndtostr( unsigned flags,int nd,char *buf,size_t maxbuf );
libc
Функция netmgr_ndtostr() преобразует дескриптор узла nd в строку и сохраняет ее в буфер, на который указывает buf. Размер буфера задается maxbuf.
Дескриптор узла – временный числовой идентификатор удаленного узла.
Аргумент flags определяет, какую часть(и) полного имени пути (FQPN) настраивать. Следующая диаграмма описывает части FQPN, /net/jam.site.ru~preferred
:
Полное имя пути (FQNN) - jam.site.ru
.
Строка по умолчанию, которую создает netmgr_ndtostr() - это FQNN плюс приоритизация трафика (QoS), если она не является значением по умолчанию (~loadbalance). Можно передать эту строку любому другому узлу, который может вызвать netmgr_strtond() и имеет nd, который ссылается на тот же узел с той же приоритизацией трафика.
Поразрядное ИЛИ для flags изменяет строку по умолчанию следующим образом:
/
) узла, определяемого 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
, возвращается строка /
.
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
.
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 по отдельности.
Не используйте ND2S_*_HIDE и соответствующий ND2S_*_SHOW вместе. |
Длина строки. Если возникла ошибка, функция возвращает -1
, код ошибки записывается в errno.
#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 системной библиотеки