Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       if_nameindex, if_freenameindex - получает имена сетевых интерфейсов и индексы

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <net/if.h>

       struct if_nameindex *if_nameindex(void);
       void if_freenameindex(struct if_nameindex *ptr);

ОПИСАНИЕ

       Функция  if_nameindex()   возвращает  массив  структур  if_nameindex,  каждая  из  которых
       содержит информацию об  одном  из  сетевых  интерфейсов  системы.  Структура  if_nameindex
       содержит по крайней мере следующие данные:

           unsigned int if_index; /* индекс интерфейса (1, 2, …) */
           char        *if_name;  /* имя с Null в конце («eth0», и т. д.) */

       В  поле  if_index  содержится  индекс  интерфейса.  Значение поля if_name указывает на имя
       интерфейса (завершается null). Конец массива определяется по  записи  if_index  с  нулевым
       значением и по записи if_name со значением NULL.

       Память  под структуру данных, возвращаемая if_nameindex(), выделяется динамически и должна
       освобождаться с помощью if_freenameindex(), когда больше не нужна.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       On success, if_nameindex()  returns pointer to the array; on error, NULL is returned,  and
       errno is set to indicate the error.

ОШИБКИ

       Функция if_nameindex() может завершиться с ошибкой и изменить errno если:

       ENOBUFS
              Недостаточно ресурсов.

       Также  функция  if_nameindex()  может  завершиться с ошибками, перечисленными в socket(2),
       bind(2), ioctl(2), getsockname(2), recvmsg(2), sendto(2) или malloc(3).

ВЕРСИИ

       Впервые функция if_nameindex() появилась в  glibc  2.1,  но  до  glibc  2.3.4,  реализация
       поддерживала  только  интерфейсы  с  адресами IPv4. Поддержка интерфейсов без адресов IPv4
       доступна только в ядрах, поддерживающих netlink.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │if_nameindex(), if_freenameindex()                     │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008, RFC 3493.

       Эта функция впервые появилась в BSDi.

ПРИМЕРЫ

       В программе, показанной далее, демонстрируется использование функции,  описанной  на  этой
       странице. Пример вывода этой программы может быть следующим:

           $ ./a.out 1: lo 2: wlan0 3: em1

   Исходный код программы
       #include <net/if.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       int
       main(void)
       {
           struct if_nameindex *if_ni, *i;

           if_ni = if_nameindex();
           if (if_ni == NULL) {
               perror("if_nameindex");
               exit(EXIT_FAILURE);
           }

           for (i = if_ni; !(i->if_index == 0 && i->if_name == NULL); i++)
               printf("%u: %s\n", i->if_index, i->if_name);

           if_freenameindex(if_ni);

           exit(EXIT_SUCCESS);
       }

СМ. ТАКЖЕ

       getsockopt(2),   setsockopt(2),   getifaddrs(3),   if_indextoname(3),   if_nametoindex(3),
       ifconfig(8)

ПЕРЕВОД

       Русский   перевод   этой    страницы    руководства    был    сделан    Azamat    Hackimov
       <azamat.hackimov@gmail.com>,    Dmitriy   S.   Seregin   <dseregin@59.ru>,   Yuri   Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.