ADDR2ASCII

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

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

索引

ライブラリ

Lb libc  

索引

書式

In sys/types.h In netinet/in.h In arpa/inet.h Ft char * Fn addr2ascii int af const void *addrp int len char *buf Ft int Fn ascii2addr int af const char *ascii void *result  

索引

解説

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

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

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

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

AF_INET
struct in_addr (in Aq Pa netinet/in.h )
AF_LINK
struct sockaddr_dl (in Aq Pa net/if_dl.h )

 

索引

戻り値

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

 

索引

inet(3) 関数 Fn inet_ntoa と Fn 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));
}

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

索引

エラー

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

Bq Er ENAMETOOLONG
Fn addr2ascii ルーチンは、 Fa af によって渡されたアドレスファミリに不適切なパラメータ Fa len を渡されました。
Bq Er EPROTONOSUPPORT
いずれかのルーチンに、 AF_INET または AF_LINK ではない Fa af パラメータが渡されました。
Bq Er EINVAL
Fn ascii2addr に渡された文字列は、 アドレスファミリ Fa af について不適切にフォーマットされていました。

 

索引

関連項目

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

索引

歴史

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

索引

作者

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

索引

バグ

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

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


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
歴史
作者
バグ

jman



Time: 07:06:37 GMT, January 12, 2009