IF_NAMEINDEX - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
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; /* Index of interface (1, 2, ...) */ char *if_name; /* Null-terminated name ("eth0", etc.) */
if_index字段包含接口索引。 if_name字段指向以空值终止的接口名称。数组的结尾由条目指示,其中if_index设置为零,而if_name设置为NULL。
由if_nameindex()返回的数据结构是动态分配的,并且在不再需要时应使用if_freenameindex()释放它。
返回值
成功时,if_nameindex()返回指向数组的指针;如果发生错误,则返回NULL,并正确设置errno。
错误说明
如果出现以下情况,if_nameindex()可能会失败并设置errno:
- ENOBUFS
- 可用资源不足。
如果为socket(2),bind(2),ioctl(2),getsockname(2),recvmsg(2),sendto(2)或malloc(3)指定了任何错误,if_nameindex()也可能会失败。
版本
if_nameindex()函数首先出现在glibc 2.1中,但在glibc 2.3.4之前,该实现仅支持具有IPv4地址的接口。没有IPv4地址的接口的支持仅在支持netlink的内核上可用。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
if_nameindex(), if_freenameindex() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008,RFC 3493。
此功能最早出现在BSDi中。
示例
以下程序演示了此页面上描述的功能的使用。该程序可能产生的输出示例如下:
$ ./a.out 1: lo 2: wlan0 3: em1
Program source
#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手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。