IF_NAMEINDEX - Linux手册页

时间:2019-08-20 18:00:37  来源:igfitidea点击:

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)。

InterfaceAttributeValue
if_nameindex(),
if_freenameindex()
Thread safetyMT-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/