名 前
inet_aton, inet_addr, inet_network, inet_ntoa, inet_makeaddr, inet_lnaof, inet_netof − イ ン タ ー ネ ッ ト ア ド レ ス 操 作 ル ー チ ン
書 式
#include
<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);
in_addr_t inet_addr(const char *cp);
in_addr_t inet_network(const char *cp);
char *inet_ntoa(struct in_addr in);
struct in_addr inet_makeaddr(in_addr_t net, in_addr_t host);
in_addr_t inet_lnaof(struct in_addr in);
in_addr_t inet_netof(struct in_addr in);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
inet_aton(), inet_ntoa(): _BSD_SOURCE || _SVID_SOURCE
説 明
inet_aton() は 、 イ ン タ ー ネ ッ ト ホ ス ト の ア ド レ ス cp を 、 IPv4 の 数 値 と ド ッ ト に よ る 表 記 か ら (ネ ッ ト ワ ー ク バ イ ト オ ー ダ の ) バ イ ナ リ 値 へ 変 換 し 、 変 換 結 果 を inp が 指 し て い る 構 造 体 に 格 納 す る 。 ア ド レ ス が 有 効 な 場 合 0 以 外 を 返 し 、 そ う で な い 場 合 は 0 を 返 す 。 cp で 渡 す ア ド レ ス と し て 、 以 下 の 形 式 を 用 い る こ と が で き る 。
a.b.c.d |
4 つ の 数 字 の そ れ ぞ れ は ア ド レ ス の 各 バ イ ト を 示 す 。 こ れ ら の バ イ ト は 左 か ら 右 の 順 序 で バ イ ナ リ ア ド レ ス に 割 り 当 て ら れ る 。 | ||||||||||||||
a.b.c |
a と b は バ イ ナ リ ア ド レ ス の 最 初 の 2 バ イ ト を 示 す 。 c は 16 ビ ッ ト 値 と 解 釈 さ れ 、 バ イ ナ リ ア ド レ ス の 右 側 の 2 バ イ ト を 表 す 。 こ の 表 記 は 、 (過 去 の も の と な っ た ) ク ラ ス B ネ ッ ト ワ ー ク ア ド レ ス を 指 定 す る の に 適 し て い る 。 | ||||||||||||||
a.b |
a は バ イ ナ リ ア ド レ ス の 最 初 の バ イ ト を 示 す 。 b は 24 ビ ッ ト 値 と 解 釈 さ れ 、 バ イ ナ リ ア ド レ ス の 右 側 の 3 バ イ ト を 表 す 。 こ の 表 記 は 、 (過 去 の も の と な っ た ) ク ラ ス A ネ ッ ト ワ ー ク ア ド レ ス を 指 定 す る の に 適 し て い る 。 値 a は 32 ビ ッ ト 値 と 解 釈 さ れ 、 バ イ ト の 再 配 置 は 行 わ れ ず 、 そ の ま ま バ イ ナ リ ア ド レ ス と し て 格 納 さ れ る 。 上 記 の 全 て の 形 式 で 、 ド ッ ト 区 切 り の ア ド レ ス の 各 要 素 は 、 10 進 数 、 8 進 数 (先 頭 に 0 を 付 け る )、 16 進 数 (先 頭 に 0X を 付 け る ) で 指 定 で き る 。 こ れ ら の 形 式 の ア ド レ ス を ま と め て IPv4 の 数 値 と ド ッ ト に よ る 表 記 (IPv4 numbers−and−dots notation) と 呼 ぶ 。 ま た 、 10 進 数 4 つ だ け を 使 っ た 形 式 を IPv4 の ド ッ ト 区 切 り の 10 進 数 表 記 (IPv4 dotted−decimal notation) と 呼 ぶ (IPv4 の ド ッ ト 区 切 り 4 分 割 表 記 (IPv4 dotted−decimal notation) と 呼 ぶ こ と も あ る )。 inet_aton() は 渡 さ れ た 文 字 列 が 正 常 に 解 釈 で き た 場 合 1 を 返 し 、 文 字 列 が 不 正 な 場 合 0 を 返 す (エ ラ ー の 場 合 に errno は セ ッ ト さ れ な い )。 inet_addr() 関 数 は 、 イ ン タ ー ネ ッ ト ホ ス ト の ア ド レ ス cp を 、 IPv4 の 数 値 と ド ッ ト に よ る 表 記 か ら ネ ッ ト ワ ー ク バ イ ト オ ー ダ で の バ イ ナ リ 値 へ 変 換 し て 返 す 。 入 力 が 不 正 な 場 合 、 INADDR_NONE (普 通 は −1) を 返 す 。 −1 は 有 効 な ア ド レ ス (255.255.255.255) な の で 、 こ の 関 数 を 使 う と 問 題 に な る か も し れ な い 。 こ の 関 数 を 使 う の は 避 け 、 代 わ り に inet_aton(), inet_pton(3), getaddrinfo(3) を 使 う の が よ い 。 こ れ ら の 関 数 の 方 が 、 エ ラ ー の 通 知 が よ り き れ い な 方 法 で 行 わ れ る 。 inet_network() 関 数 は 、 IPv4 の 数 値 と ド ッ ト に よ る 表 記 の 文 字 列 cp を 、 イ ン タ ー ネ ッ ト ア ド レ ス と し て の 使 用 に 適 し た ホ ス ト バ イ ト オ ー ダ の 数 値 に 変 換 す る 。 成 功 す る と 、 変 換 さ れ た ア ド レ ス を 返 す 。 入 力 が 不 正 な 場 合 は −1 を 返 す 。 inet_ntoa() 関 数 は 、 ネ ッ ト ワ ー ク バ イ ト オ ー ダ で 渡 さ れ た イ ン タ ー ネ ッ ト ホ ス ト ア ド レ ス in を 、 IPv4 の ド ッ ト 区 切 り の 10 進 数 表 記 の 文 字 列 に 変 換 す る 。 文 字 列 は 静 的 に 割 当 て ら れ た バ ッ フ ァ ー に 格 納 さ れ て 返 さ れ る の で 、 こ の 後 で こ の 関 数 を 再 度 呼 び 出 す と 文 字 列 は 上 書 き さ れ る 。 inet_lnaof() 関 数 は 、 イ ン タ ー ネ ッ ト ア ド レ ス in の ロ ー カ ル ネ ッ ト ワ ー ク 部 分 を 返 す 。 こ の 返 り 値 は ホ ス ト バ イ ト オ ー ダ で あ る 。 inet_netof() 関 数 は 、 イ ン タ ー ネ ッ ト ア ド レ ス in の ネ ッ ト ワ ー ク 部 分 を 返 す 。 こ の 返 り 値 は ホ ス ト バ イ ト オ ー ダ で あ る 。 inet_makeaddr() 関 数 は inet_netof() と inet_lnaof() の 逆 の 機 能 を 持 つ 。 ネ ッ ト ワ ー ク 番 号 net と 、 ロ ー カ ル ア ド レ ス host を 組 み 合 わ せ て 生 成 し た 、 イ ン タ ー ネ ッ ト ホ ス ト ア ド レ ス を ネ ッ ト ワ ー ク バ イ ト オ ー ダ で 返 す 。 host, net は と も に ホ ス ト バ イ ト オ ー ダ で あ る 。 inet_ntoa(), inet_makeaddr(), inet_lnaof(), inet_netof() で 使 用 す る 構 造 体 in_addr は <netinet/in.h> で 次 の よ う に 定 義 さ れ て い る : typedef uint32_t in_addr_t; struct in_addr
{ 準 拠4.3BSD. inet_addr(), inet_ntoa() は POSIX.1−2001 で 規 定 さ れ て い る 。 inet_aton() は POSIX.1−2001 で 規 定 さ れ て い な い が 、 ほ と ん ど の シ ス テ ム で 利 用 可 能 で あ る 。 注 意i386 で は ホ ス ト バ イ ト オ ー ダ は Least Significant Byte (LSB) first (リ ト ル エ ン デ ィ ア ン ) だ が 、 イ ン タ ー ネ ッ ト で 使 わ れ る ネ ッ ト ワ ー ク バ イ ト オ ー ダ は Most Significant Byte (MSB) first (ビ ッ グ エ ン デ ィ ア ン ) で あ る 点 に 注 意 す る こ と 。 inet_lnaof(), inet_netof(), inet_makeaddr() は 過 去 の 名 残 で あ り 、 渡 さ れ た ア ド レ ス が ク ラ ス フ ル ネ ッ ト ワ ー ク ア ド レ ス (classful network addresses) で あ る と 仮 定 し て 処 理 を 行 う 。 ク ラ ス フ ル ネ ッ ト ワ ー ク ア ド レ ス で は 、 以 下 に あ る よ う に 、 IPv4 ネ ッ ト ワ ー ク ア ド レ ス を バ イ ト 境 界 で ネ ッ ト ワ ー ク 部 と ホ ス ト 部 に 分 割 す る 。
ク ラ ス フ ル ネ ッ ト ワ ー ク ア ド レ ス は 現 在 で は 廃 止 さ れ 、 ク ラ ス レ ス ド メ イ ン 間 ル ー チ ン (CIDR) に 取 っ て 代 わ ら れ た 。 CIDR で は 、 ア ド レ ス を 任 意 の ビ ッ ト 境 界 (バ イ ト 境 界 で は な い ) で ネ ッ ト ワ ー ク 部 と ホ ス ト 部 に 分 割 す る 。 例以 下 は inet_aton() と inet_ntoa() の 使 用 例 で あ る 。 こ の よ う に 実 行 す る 。 $ ./a.out
226.000.000.037 # Last byte is in octal #define _BSD_SOURCE int if (argc != 2)
{ if
(inet_aton(argv[1], &addr) == 0) { printf("%s\n",
inet_ntoa(addr)); 関 連 項 目byteorder(3), getaddrinfo(3), gethostbyname(3), getnameinfo(3), getnetent(3), inet_net_pton(3), inet_ntop(3), inet_pton(3), hosts(5), networks(5) こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |