Linxu的struct ifaddrs 与getifaddrs()函数
来源:互联网 发布:花生壳 ddns 域名管理 编辑:程序博客网 时间:2024/05/25 01:35
来自man函数手册中的介绍:
1,关于struct ifaddrs的说明:
struct ifaddrs{ struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Address of interface */ struct sockaddr *ifa_netmask; /* Netmask of interface */ union { struct sockaddr *ifu_broadaddr; /* Broadcast address of interface */ struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */ } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr #define ifa_dstaddr ifa_ifu.ifu_dstaddr void *ifa_data; /* Address-specific data */};
2,关于getifaddrs()
The getifaddrs() function creates a linked list of structures describing the network interfaces of the local system, and stores the address of the first
item of the list in *ifap.
The list consists of ifaddrs structures, defined as follows:
The ifa_next field contains a pointer to the next structure on the list, or
NULL if this is the last item of the list.
The ifa_name points to the null-terminated interface name.
The ifa_flags field contains the interface flags
The ifa_addr field points to a structure containing the interface address.
The ifa_netmask field points to a structure containing the netmask associated with ifa_addr, if applicable for the address family.
Depending on whether the bit IFF_BROADCAST or IFF_POINTOPOINT is set in ifa_flags (only one can be set at a time), either ifa_broadaddr will contain the broadcast address associated with ifa_addr (if applicable for the address family) or ifa_dstaddr will contain the destination address of the point-to-point interface.
The ifa_data field points to a buffer containing address-family-specific data;this field may be NULL if there is no such data for this interface.
返回值:
On success, getifaddrs() returns zero; on error, -1 is returned, and errno is set appropriately.
3,注意:
The data returned by getifaddrs() is dynamically allocated and should be freed using freeifaddrs() when no longer needed.
4, man中的实例代码:
#include <arpa/inet.h>#include <sys/socket.h>#include <netdb.h>#include <ifaddrs.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, char *argv[]){ struct ifaddrs *ifaddr, *ifa; int family, s; char host[NI_MAXHOST]; if (getifaddrs(&ifaddr) == -1) { perror("getifaddrs"); exit(EXIT_FAILURE); } /* Walk through linked list, maintaining head pointer so we * can free list later */ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; /* Display interface name and family (including symbolic * form of the latter for the common families) */ printf("%s address family: %d%s\n", ifa->ifa_name, family, (family == AF_PACKET) ? " (AF_PACKET)" : (family == AF_INET) ? " (AF_INET)" : (family == AF_INET6) ? " (AF_INET6)" : ""); /* For an AF_INET* interface address, display the address */ if (family == AF_INET || family == AF_INET6) { s = getnameinfo(ifa->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s != 0) { printf("getnameinfo() failed: %s\n", gai_strerror(s)); exit(EXIT_FAILURE); } printf("\taddress: <%s>\n", host); } } freeifaddrs(ifaddr); exit(EXIT_SUCCESS);}
- Linxu的struct ifaddrs 与getifaddrs()函数
- 关于getifaddrs()和struct ifaddrs的说明
- 关于getifaddrs()和struct ifaddrs的说明
- 关于getifaddrs()和struct ifaddrs的说明
- getifaddrs()和struct ifaddrs的使用,获取本机IP
- getifaddrs()和struct ifaddrs的使用,获取本机IP
- getifaddrs()和struct ifaddrs的使用,获取本机IP
- linxu的select函数
- typedef struct与struct的区别 (转载)
- Struct 与 Class 的初始化赋初值(struct篇)
- Linxu下的串口编程(二)
- Linxu下的串口编程(二)
- Linxu下的串口编程(二)
- Linxu下的串口编程(二)
- 浅析Linxu与嵌入式
- Linxu 压缩与解压缩
- Go语言struct的创建与初始化、函数调用
- Linxu命令与文件的搜索 - which, whereis, locate, find
- 【PAT】1032. Sharing (25)
- python和c性能比较,以及用dll优化python代码
- 计算二进制数中1的个数
- POJ 3624 Charm Bracelet 0-1背包
- HDU 3829 Cat VS Dog
- Linxu的struct ifaddrs 与getifaddrs()函数
- EPC网络架构
- RAC实例 表空间 维护
- MFC六大关键技术之消息映射与命令传递
- 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)
- 模拟器报Installation error: INSTALL_FAILED_CONTAINER_ERROR解决方法
- 最新基于adt-bundle-windows-x86的android开发环境搭建
- (顺序表应用5.1.2)UVA 113 The Dole Queue(双向约瑟夫环问题:给出总人数n,顺时针数k个,逆时针数m个)
- 关于opengl坐标变换的一点体会