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 によって
提案されました。
このインタフェース自体は、
INRIA
の
IPv6
の実装により、はじめて登場しました。
索引
作者
コードとドキュメントは MIT Laboratory for Computer Science の
An Garrett A. Wollman
によるものです。
索引
バグ
オリジナルの実装は IPv6 をサポートしていました。
このサポートは、そのうち復活されるはずです。
NRL
の実装には、
AF_ISO
および
AF_NS
アドレスファミリのサポートも含まれていました。
このインタフェースの一般性については、いくらか疑問があります。
本当に一般的なインタフェースであれば、バッファを動的に割り当てることが
できるよう、使用されるバッファの長さを決定する手段を備えているでしょうし、
バイナリアドレスを保持するのには必ず
``struct sockaddr
''
を要求するでしょう。
残念ながら、これは既存のやり方と互換性がありません。
この制限のため、任意のアドレスファミリからネットワークアドレスを
印字するルーチンは、必要な最大バッファ長や、
バイナリアドレスとして使用するアドレスの適切な部分といった
内部的な知識を依然として持っていなければなりません。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- 例
-
- エラー
-
- 関連項目
-
- 歴史
-
- 作者
-
- バグ
-
Time: 07:06:37 GMT, January 12, 2009