other versions
INET(3) | Linux Programmer's Manual | INET(3) |
名前¶
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(int net, int 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
- 値 a は 32 ビット値と解釈され、バイトの再配置は行われず、 そのままバイナリアドレスとして格納される。
typedef uint32_t in_addr_t; struct in_addr { in_addr_t s_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 ネットワークアドレスをバイト境界でネットワーク部とホスト部に分割する。- Class A
- (ネットワークバイトオーダの) アドレスの最上位ビットが 0 の場合、 このアドレス種別となる。このアドレス種別では、 最上位バイトがネットワークアドレスを表し、 残りの 3 バイトがホストアドレスを表す。
- Class B
- (ネットワークバイトオーダの) アドレスの上位側 2 ビットがバイナリ値で 10 の場合、このアドレス種別となる。このアドレス種別では、 上位 2 バイトがネットワークアドレスを表し、 残りの 2 バイトがホストアドレスを表す。
- Class C
- (ネットワークバイトオーダの) アドレスの上位側 3 ビットがバイナリ値で 110 の場合、このアドレス種別となる。このアドレス種別では、 上位 3 バイトがネットワークアドレスを表し、 残りの 1 バイトがホストアドレスを表す。
例¶
以下は inet_aton() と inet_ntoa() の使用例である。このように実行する。$ ./a.out 226.000.000.037 # Last byte is in octal 226.0.0.31 $ ./a.out 0x7f.1 # First byte is in hex 127.0.0.1
プログラムのソース¶
#define _BSD_SOURCE #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { struct in_addr addr; if (argc != 2) { fprintf(stderr, "%s <dotted-address>\n", argv[0]); exit(EXIT_FAILURE); } if (inet_aton(argv[1], &addr) == 0) { fprintf(stderr, "Invalid address\n"); exit(EXIT_FAILURE); } printf("%s\n", inet_ntoa(addr)); exit(EXIT_SUCCESS); }
関連項目¶
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.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2014-04-19 | GNU |