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 */
};
ifa_next指向連結清單的下一個成員;ifa_name是接口名稱,以0結尾的字元串,比如eth0,lo;ifa_flags是接口的辨別位(比如當IFF_BROADCAST或IFF_POINTOPOINT設定到此辨別位時,影響聯合體變量ifu_broadaddr存儲廣播位址或ifu_dstaddr記錄點對點位址);ifa_netmask存儲該接口的子網路遮罩;結構體變量存儲廣播位址或點對點位址(見括弧介紹ifa_flags);ifa_data存儲了該接口協定族的特殊資訊,它通常是NULL(一般不關注他)。
函數getifaddrs(int getifaddrs (struct ifaddrs **__ifap))擷取本地網絡接口資訊,将之存儲于連結清單中,連結清單頭結點指針存儲于__ifap中帶回,函數執行成功傳回0,失敗傳回-1,且為errno指派。
很顯然,函數getifaddrs用于擷取本機接口資訊,比如最典型的擷取本機IP位址。