スポンサーリンク

ADDR2ASCII(3) FreeBSD ライブラリ関数マニュアル ADDR2ASCII(3)

名称

addr2ascii, ascii2addr − 一般的なアドレスフォーマットルーチン

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

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

char *

addr2ascii(int af, const void *addrp, int len, char *buf);

int

ascii2addr(int af, const char *ascii, void *result);

解説

ルーチン addr2ascii() と ascii2addr() は、バイナリ形式と、アドレスファミ リに適切な印字可能な形式との間でネットワークアドレスを変換するのに使用さ れます。両方の関数とも、変換プロセスで使用されるアドレスファミリを指定す る af 引数を使用します (現時点では、 AF_INET および AF_LINK アドレスファ ミリだけがサポートされています)。

addr2ascii() 関数は、バイナリのネットワーク形式のアドレスを印字可能な形式 に変換するのに使用されます。 af の他に、 3 つの引数を持ちます。 addrp 引 数は、変換するネットワークアドレスへのポインタです。 len 引数は、アドレス の長さです。 buf 引数は、結果を保持するために呼び出し元が割り振るバッファ へのオプションのポインタです。ヌルポインタが渡されると、 addr2ascii() は 静的に割り振られたバッファを使用します。

ascii2addr() 関数は、 addr2ascii() と逆の操作を実行します。 af に加え て、2 つのパラメータ asciiresult を使用します。 ascii パラメータは、 バイナリに変換される文字列へのポインタです。 result パラメータは、指定さ れたファミリに適切なネットワークアドレス構造体へのポインタです。

指定されたファミリにおいて使用されるバイナリアドレスとして適切な構造体は 次のとおりです。

       AF_INET

struct in_addr (in ⟨netinet/in.h⟩)
AF_LINK
struct sockaddr_dl (in ⟨net/if_dl.h⟩)

戻り値

addr2ascii() 関数は、渡されたバッファのアドレス、または NULL ポインタが渡 された場合は静的バッファのアドレスを返します。処理が失敗した場合は、ヌル ポインタを返します。 ascii2addr() 関数は、バイナリアドレスの長さ (バイト 単位) を返します。処理が失敗した場合は -1 を返します。

inet(3) 関数 inet_ntoa() と inet_aton() は次のように実装することができま す。

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

     char *
      inet_ntoa(struct in_addr addr)
      {
              return addr2ascii(AF_INET, &addr, sizeof addr, 0);
      }

     int
      inet_aton(const char *ascii, struct in_addr *addr)
      {
              return (ascii2addr(AF_INET, ascii, addr)
                  == sizeof(*addr));
      }

実際には、これは実行できません。 addr2ascii() と ascii2addr() は、他の方 法でなく、 inet(3) 関数で実装されているからです。

エラー

処理失敗が返されたとき、 errno に次の値の 1 つの設定されます。

       [ENAMETOOLONG]

addr2ascii() ルーチンは、 af によって渡されたアドレス ファミリに不適切なパラメータ len を渡されました。

[EPROTONOSUPPORT]
いずれかのルーチンに、 AF_INET または AF_LINK ではない af パラメータが渡されました。

[EINVAL]
ascii2addr
() に渡された文字列は、アドレスファミリ af について不適切にフォーマットされていました。

関連項目

inet(3), linkaddr(3), inet(4)

歴史

これに近いインタフェースは、もともと Craig Partridge によって提案されまし た。このインタフェース自体は、 INRIA の IPv6 の実装により、はじめて登場し ました。

作者

コードとドキュメントは MIT Laboratory for Computer Science の Garrett A. Wollman によるものです。

バグ

オリジナルの実装は IPv6 をサポートしていました。このサポートは、そのうち 復活されるはずです。 NRL の実装には、 AF_ISO および AF_NS アドレスファミ リのサポートも含まれていました。

このインタフェースの一般性については、いくらか疑問があります。本当に一般 的なインタフェースであれば、バッファを動的に割り当てることができるよう、 使用されるバッファの長さを決定する手段を備えているでしょうし、バイナリア ドレスを保持するのには必ず ‘‘struct sockaddr’’ を要求するでしょう。残念な がら、これは既存のやり方と互換性がありません。この制限のため、任意のアド レスファミリからネットワークアドレスを印字するルーチンは、必要な最大バッ ファ長や、バイナリアドレスとして使用するアドレスの適切な部分といった内部 的な知識を依然として持っていなければなりません。

FreeBSD 10.0 June 13, 1996 FreeBSD 10.0

スポンサーリンク