GETIFADDRS(3) | FreeBSD Library Functions Manual | GETIFADDRS(3) |
名称
getifaddrs — インタフェースアドレスを取得する書式
#include < ifaddrs.h> int
getifaddrs( struct ifaddrs **ifap);
void
freeifaddrs( struct ifaddrs *ifp);
解説
getifaddrs() 関数は、 ifap によって参照されるメモリでローカルマシン上にネットワークインタフェースのリンクしたリストへの参照を格納します。リストは、インクルードファイル < ifaddrs.h> に定義されるように、 ifaddrs 構造体から構成されます。 ifaddrs 構造体は少なくとも次のエントリを含んでいます。
struct ifaddrs *ifa_next; /* 次の構造体へのポインタ */ char *ifa_name; /* インタフェース名 */ u_int ifa_flags; /* インタフェースフラグ */ struct sockaddr *ifa_addr; /* インタフェースアドレス */ struct sockaddr *ifa_netmask; /* インタフェースネットマスク */ struct sockaddr *ifa_broadaddr; /* インタフェースブロードキャスト アドレス */ struct sockaddr *ifa_dstaddr; /* P2P インタフェースあて先 */ void *ifa_data; /* アドレス特有データ */
ifa_next
フィールドは、リストでの次の構造体へのポインタを含んでいます。このフィールドのリストでの最後の構造体は NULL です。
ifa_name
フィールドはインタフェース名を含んでいます。
ifconfig(8) ユーティリティによって設定されるように、 ifa_flags
フィールドはインタフェースフラグを含んでいます。
次のうちの 1 つが存在する場合、 ifa_addr
フィールドはインタフェースのアドレスあるいはインタフェースのリンクレベルアドレスのいずれかを参照します。そうでなければ、それは NULL です。 ( ifa_addr
フィールドの sa_family
フィールドは ifa_addr
アドレスのフォーマットを決定するために調べられるべきです。)
1 つが設定される場合、 ifa_netmask
フィールドは ifa_addr
に関連したネットマスク (netmask) を参照します。そうでなければそれは NULL です。
1 つが存在する場合、非 P2P インタフェースのため単に参照すべき、 ifa_broadaddr
フィールドは ifa_addr
に関連したブロードキャストアドレスを参照します。そうでなければ、それは NULL です。
1 つが存在する場合、 ifa_dstaddr
フィールドは P2P インタフェースで、あて先アドレスを参照します。そうでなければ、それは NULL です。
ifa_data
フィールドはアドレスファミリ特有データを参照します。 AF_LINK アドレスのために、それは様々なインタフェース属性と統計値を含んでいる (インクルードファイル < net/if.h> で定義されたように) struct if_data へのポインタを含んでいます。他のすべてのアドレスファミリのために、それはアドレスごとのインタフェース統計値を含んでいる (インクルードファイル < net/if.h> で定義されたように) struct ifa_data へのポインタを含んでいます。
getifaddrs() によって返されたデータはダイナミックに割り付けられ、もはや必要でなかった時 freeifaddrs() を使用して解放されるべきです。
戻り値
The getifaddrs() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.エラー
getifaddrs() が失敗した場合、ライブラリルーチン ioctl(2), socket(2), malloc(3) または sysctl(3) で明記されたエラーのいずれかが errno に設定されます。歴史
getifaddrs 実装は、BSDi BSD/OS ではじめて登場しました。May 21, 2013 | FreeBSD |