⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 if_nameindex.c

📁 unix网络编程第一卷socket编程书上的全部源代码
💻 C
字号:
/* include if_nameindex */#include	"unpifi.h"#include	"unproute.h"struct if_nameindex *if_nameindex(void){	char				*buf, *next, *lim;	size_t				len;	struct if_msghdr	*ifm;	struct sockaddr		*sa, *rti_info[RTAX_MAX];	struct sockaddr_dl	*sdl;	struct if_nameindex	*result, *ifptr;	char				*namptr;	if ( (buf = net_rt_iflist(0, 0, &len)) == NULL)		return(NULL);	if ( (result = malloc(len)) == NULL)	/* overestimate */		return(NULL);	ifptr = result;	namptr = (char *) result + len;	/* names start at end of buffer */	lim = buf + len;	for (next = buf; next < lim; next += ifm->ifm_msglen) {		ifm = (struct if_msghdr *) next;		if (ifm->ifm_type == RTM_IFINFO) {			sa = (struct sockaddr *) (ifm + 1);			get_rtaddrs(ifm->ifm_addrs, sa, rti_info);			if ( (sa = rti_info[RTAX_IFP]) != NULL) {				if (sa->sa_family == AF_LINK) {					sdl = (struct sockaddr_dl *) sa;					namptr -= sdl->sdl_nlen + 1;					strncpy(namptr, &sdl->sdl_data[0], sdl->sdl_nlen);					namptr[sdl->sdl_nlen] = 0;	/* null terminate */					ifptr->if_name = namptr;					ifptr->if_index = sdl->sdl_index;					ifptr++;				}			}		}	}	ifptr->if_name = NULL;	/* mark end of array of structs */	ifptr->if_index = 0;	free(buf);	return(result);			/* caller must free() this when done */}/* end if_nameindex *//* include if_freenameindex */voidif_freenameindex(struct if_nameindex *ptr){	free(ptr);}/* end if_freenameindex */struct if_nameindex *If_nameindex(void){	struct if_nameindex	*ifptr;	if ( (ifptr = if_nameindex()) == NULL)		err_quit("if_nameindex error");	return(ifptr);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -