IF_NAMEINDEX(3) | Руководство программиста Linux | IF_NAMEINDEX(3) |
ИМЯ¶
if_nameindex, if_freenameindex - получает имена сетевых интерфейсов и индексы
СИНТАКСИС¶
#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(), когда больше не нужна.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении if_nameindex() возвращает указатель на массив. В случае ошибки возвращается NULL, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
Функция 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(int argc, char *argv[]) {
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)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 сентября 2017 г. | GNU |