.\" Copyright (c) 1983, 1990, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" From: @(#)inet.3 8.1 (Berkeley) 6/4/93 .\" %FreeBSD: src/lib/libc/net/inet.3,v 1.8.2.3 2000/12/29 14:44:48 ru Exp % .\" .\" $FreeBSD$ .Dd June 17, 1996 .Dt INET 3 .Os BSD 4.2 .Sh 名称 .Nm inet_aton , .Nm inet_addr , .Nm inet_network , .Nm inet_ntoa , .Nm inet_ntop , .Nm inet_pton , .Nm inet_makeaddr , .Nm inet_lnaof , .Nm inet_netof .Nd インターネットアドレス操作関数 .Sh ライブラリ .Lb libc .Sh 書式 .Fd #include .Fd #include .Fd #include .Fd #include .Ft int .Fn inet_aton "const char *cp" "struct in_addr *pin" .Ft unsigned long .Fn inet_addr "const char *cp" .Ft unsigned long .Fn inet_network "const char *cp" .Ft char * .Fn inet_ntoa "struct in_addr in" .Ft const char * .Fn inet_ntop "int af" "const void *src" "char *dst" "size_t size" .Ft int .Fn inet_pton "int af" "const char *src" "void *dst" .Ft struct in_addr .Fn inet_makeaddr "unsigned long net" "unsigned long lna" .Ft unsigned long .Fn inet_lnaof "struct in_addr in" .Ft unsigned long .Fn inet_netof "struct in_addr in" .Sh 解説 .Fn inet_aton , .Fn inet_addr および .Fn inet_network ルーチンは、インターネット標準の .Ql .\& 表記法で示される数値を表現している文字列を解釈します。 .Pp .Fn inet_pton 関数は、表示形式のアドレス (つまり文字列で保持されている印字可能な形式) から ネットワーク形式 (通常 .Ft struct in_addr もしくは他の内部的なバイナリ表現形式で、ネットワークバイトオーダ) への 変換を行います。 この関数は、指定されたアドレスファミリにおいて、アドレスが 有効なものであれば 1 を返し、パースできなければ 0 を返します。 またシステムエラーが発生した時 (この場合は .Va errno が設定されます) には、-1 を返します。 この関数は現在 .Dv AF_INET と .Dv AF_INET6 に対して有効です。 .Pp .Fn inet_aton ルーチンは、指定された文字列をインターネットアドレスとして解釈し、 与えられた構造体の中にアドレスを設定します。 文字列が正常に解釈されると同ルーチンは 1 を返し、 文字列が無効のとき 0 を返します。 .Fn inet_addr と .Fn inet_network 関数はそれぞれ、 インターネットアドレスとインターネットネットワーク番号として使うのに 適した数値を返します。 .Pp .Fn inet_ntop 関数は、ネットワーク形式 (通常 .Ft struct in_addr もしくは他の内部的なバイナリ形式で、ネットワークバイトオーダ) から 表示形式 (外部に表示するのに適した形式) への変換を行います。 この関数は、システムエラーが発生した時 (この場合は .Va errno が設定されます) にはヌルを返し、それ以外の時は目的の文字列への ポインタを返します。 この関数は現在 .Dv AF_INET and .Dv AF_INET6 に対して有効です。 .Pp .Fn inet_ntoa ルーチンは、インターネットアドレスを受け取り .Ql .\& 表記法のアドレスを示す .Tn ASCII 文字列を返します。 .Fn inet_makeaddr ルーチンはインターネットネットワーク番号と ローカルネットワークアドレスを受け取り、 それを基にしてインターネットアドレスを生成します。 .Fn inet_netof と .Fn inet_lnaof ルーチンはインターネットホストアドレスを分割して、 それぞれネットワーク番号とローカルネットワークアドレス部として返します。 .Pp すべてのインターネットアドレスはネットワークオーダ ( 左から右への バイト順 ) で返されます。 ネットワーク番号とローカルアドレス部はすべてマシン形式の整数値で 返されます。 .Pp .Sh インターネットアドレス .Ql .\& 表記法で指定される値は次のどれか一つの形式を取ります。 .Bd -literal -offset indent a.b.c.d a.b.c a.b a .Ed .Pp 4 個の部分アドレスが指定されると、各部分は 1 バイトのデータと解釈されて、 左から右の順でインターネットアドレスの 4 バイトに割り当てられます。 インターネットアドレスが .Tn VAX 上で 32 ビットの整数値であると見なされるとき、上記に該当するバイトは、 .Dq Li d.c.b.a と表示されることに注意して下さい。 すなわち、 .Tn VAX のバイトオーダは右から左の順になります。 .Pp 3 個の部分アドレスが指定されると、最後の部分が 16 ビット値と解釈されて、 ネットワークアドレスの右端の 2 バイトになります。 これにより 3 つの部分アドレス形式で Class B ネットワークアドレスを .Dq Li 128.net.host と指定でき、便利です。 .Pp 2 個の部分アドレスが与えられると、最後の部分アドレスが 24 ビット値として 解釈されて、ネットワークアドレスの右端の 3 バイトになります。 これにより 2 個の部分アドレス形式で Class A ネットワークアドレスを .Dq Li net.host と指定でき、便利です。 .Pp 1 個の部分アドレスだけ指定されると、値はバイトの再調整なしに 直接ネットワークアドレスに保存されます。 .Pp .Ql .\& 表記法で .Dq 部分 として供給される数値はすべて、C 言語で指定される 10 進数、8 進数、16 進数の いずれかの形式を取ることができます (すなわち、先行の 0x または 0X は 16 進数を意味し、 先行する 0 は 8 進数を意味し、数値は 10 進数と解釈されます) 。 .Pp .Fn inet_aton と .Fn inet_ntoa 関数は幾分避けるべき関数で、むしろ .Xr addr2ascii 3 ファミリが使われます。 しかし、これらの関数はまだ広く実装されていないため、 当面、移植性のあるプログラムはこれらの関数に依存できず、 .Xr inet 3 関数が使われ続けるでしょう。 .Sh 診断 .Fn inet_addr と .Fn inet_network は形式違反の要求に対し .Dv INADDR_NONE 定数を返します。 .Sh 関連項目 .Xr addr2ascii 3 , .Xr gethostbyname 3 , .Xr getnetent 3 , .Xr hosts 5 , .Xr networks 5 .Rs .%R RFC .%N 2373 .%D July 1998 .%T "IP Version 6 Addressing Architecture" .Re .Sh 規格 .Fn inet_ntop と .Fn inet_pton 関数は、 .St -xns5.2d2.0 に適合しています。 .Fn inet_pton 関数は、1 個、2 個もしくは 3 個のドット形式のアドレスには 対応していないことに注意してください。 アドレスは 4 個に分けて指定しなければなりません。 これは .Fn inet_aton 関数が受け取ることのできる入力セットよりもせまいものです。 .Sh 歴史 これらの関数は .Bx 4.2 で登場しました。 .Pp .Sh バグ .Dv INADDR_NONE (0xffffffff) 値は有効なブロードキャストアドレスですが、 .Fn inet_addr はこの値を返す時に失敗を示してしまいます。 新しい .Fn inet_aton 関数では、この問題は解決されています。 ホストバイトオーダ対ネットワークバイトオーダの問題は混乱しがちです。 .Fn inet_ntoa が返す文字列は静的メモリ領域に収められます。 .Pp inet_addr は .Fa struct in_addr を返す必要があります。