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.

Never write it in C if you can do it in `awk';
Never do it in `awk' if `sed' can handle it;
Never use `sed' when `tr' can do the job;
Never invoke `tr' when `cat' is sufficient;
Avoid using `cat' whenever possible.
— Taylor's Laws of Programming