if_nameindex, if_freenameindex -
получает
имена
сетевых
интерфейсов
и индексы
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 <
[email protected]>, Dmitriy S. Seregin
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]