tail head cat sleep
QR code linking to this page

manページ  — INET

名称

inet_aton, inet_addr, inet_network, inet_ntoa, inet_ntop, inet_pton, inet_makeaddr, inet_lnaof, inet_netof – インターネットアドレス操作関数

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int
inet_aton(const char *cp, struct in_addr *pin);

unsigned long
inet_addr(const char *cp);

unsigned long
inet_network(const char *cp);

char *
inet_ntoa(struct in_addr in);

const char *
inet_ntop(int af, const void *src, char *dst, size_t size);

int
inet_pton(int af, const char *src, void *dst);

struct in_addr
inet_makeaddr(unsigned long net, unsigned long lna);

unsigned long
inet_lnaof(struct in_addr in);

unsigned long
inet_netof(struct in_addr in);

解説

inet_aton(), inet_addr() および inet_network() ルーチンは、インターネット標準の ‘.amp;’ 表記法で示される数値を表現している文字列を解釈します。

inet_pton() 関数は、表示形式のアドレス (つまり文字列で保持されている印字可能な形式) から ネットワーク形式 (通常 struct in_addr もしくは他の内部的なバイナリ表現形式で、ネットワークバイトオーダ) への 変換を行います。 この関数は、指定されたアドレスファミリにおいて、アドレスが 有効なものであれば 1 を返し、パースできなければ 0 を返します。 またシステムエラーが発生した時 (この場合は errno が設定されます) には、-1 を返します。 この関数は現在 AF_INET AF_INET6 に対して有効です。

inet_aton() ルーチンは、指定された文字列をインターネットアドレスとして解釈し、 与えられた構造体の中にアドレスを設定します。 文字列が正常に解釈されると同ルーチンは 1 を返し、 文字列が無効のとき 0 を返します。 inet_addr()inet_network() 関数はそれぞれ、 インターネットアドレスとインターネットネットワーク番号として使うのに 適した数値を返します。

inet_ntop() 関数は、ネットワーク形式 (通常 struct in_addr もしくは他の内部的なバイナリ形式で、ネットワークバイトオーダ) から 表示形式 (外部に表示するのに適した形式) への変換を行います。 この関数は、システムエラーが発生した時 (この場合は errno が設定されます) にはヌルを返し、それ以外の時は目的の文字列への ポインタを返します。 この関数は現在 AF_INET AF_INET6 に対して有効です。

inet_ntoa() ルーチンは、インターネットアドレスを受け取り ‘.amp;’ 表記法のアドレスを示す ASCII 文字列を返します。 inet_makeaddr() ルーチンはインターネットネットワーク番号と ローカルネットワークアドレスを受け取り、 それを基にしてインターネットアドレスを生成します。 inet_netof()inet_lnaof() ルーチンはインターネットホストアドレスを分割して、 それぞれネットワーク番号とローカルネットワークアドレス部として返します。

すべてのインターネットアドレスはネットワークオーダ (左から右への バイト順) で返されます。 ネットワーク番号とローカルアドレス部はすべてマシン形式の整数値で 返されます。

インターネットアドレス

.amp;’ 表記法で指定される値は次のどれか一つの形式を取ります。
a.b.c.d
a.b.c
a.b
a

4 個の部分アドレスが指定されると、各部分は 1 バイトのデータと解釈されて、 左から右の順でインターネットアドレスの 4 バイトに割り当てられます。 インターネットアドレスが VAX 上で 32 ビットの整数値であると見なされるとき、上記に該当するバイトは、 "d.c.b.a" と表示されることに注意して下さい。 すなわち、 VAX のバイトオーダは右から左の順になります。

3 個の部分アドレスが指定されると、最後の部分が 16 ビット値と解釈されて、 ネットワークアドレスの右端の 2 バイトになります。 これにより 3 つの部分アドレス形式で Class B ネットワークアドレスを "128.net.host" と指定でき、便利です。

2 個の部分アドレスが与えられると、最後の部分アドレスが 24 ビット値として 解釈されて、ネットワークアドレスの右端の 3 バイトになります。 これにより 2 個の部分アドレス形式で Class A ネットワークアドレスを "net.host" と指定でき、便利です。

1 個の部分アドレスだけ指定されると、値はバイトの再調整なしに 直接ネットワークアドレスに保存されます。

.amp;’ 表記法で "部分" として供給される数値はすべて、C 言語で指定される 10 進数、8 進数、16 進数の いずれかの形式を取ることができます (すなわち、先行の 0x または 0X は 16 進数を意味し、 先行する 0 は 8 進数を意味し、数値は 10 進数と解釈されます) 。

inet_aton()inet_ntoa() 関数は幾分避けるべき関数で、むしろ addr2ascii(3) ファミリが使われます。 しかし、これらの関数はまだ広く実装されていないため、 当面、移植性のあるプログラムはこれらの関数に依存できず、 inet(3) 関数が使われ続けるでしょう。

診断

inet_addr()inet_network() は形式違反の要求に対し INADDR_NONE 定数を返します。

関連項目

addr2ascii(3), gethostbyname(3), getnetent(3), hosts(5), networks(5)

2373, RFC, IP Version 6 Addressing Architecture, July 1998.

規格

inet_ntop()inet_pton() 関数は、 -xns5.2 に適合しています。 inet_pton() 関数は、1 個、2 個もしくは 3 個のドット形式のアドレスには 対応していないことに注意してください。 アドレスは 4 個に分けて、10 進数で指定しなければなりません。 これは inet_aton() 関数が受け取ることのできる入力セットよりもせまいものです。

歴史

これらの関数は BSD 4.2 で登場しました。

バグ

INADDR_NONE (0xffffffff) 値は有効なブロードキャストアドレスですが、 inet_addr() はこの値を返す時に失敗を示してしまいます。 新しい inet_aton() 関数では、この問題は解決されています。 ホストバイトオーダ対ネットワークバイトオーダの問題は混乱しがちです。 inet_ntoa() が返す文字列は静的メモリ領域に収められます。

inet_addr は struct, in_addr を返す必要があります。


INET (3) June 17, 1996

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

What is this horrible fascination with Unix? The operating system of the 1960s, still gaining in popularity in the 1990s.
— Donald A. Norman