if_nameindex(3)

НАИМЕНОВАНИЕ
if_nameindex, if_freenameindex - получает имена сетевых интерфейсов и индексы

БИБЛИОТЕКА
Стандартная библиотека языка C (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).

АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение
if_nameindex(), if_freenameindex() | Безвредность в нитях | MT-Safe

СТАНДАРТЫ
POSIX.1-2008, RFC 3493.

ИСТОРИЯ
glibc 2.1. POSIX.1-2001. BSDi.

Before glibc 2.3.4, the implementation supported only interfaces with IPv4 addresses. Support of interfaces that don't have IPv4 addresses is available only on kernels that support netlink.

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

    $ ./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> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).