IPX(3)

名称
ipx_addr, ipx_ntoa - IPX アドレス変換ルーチン

ライブラリ
libipx

書式
<sys/types.h> <netipx/ipx.h> struct ipx_addr ipx_addr(const char *cp) char * ipx_ntoa(struct ipx_addr ipx)

解説
ipx_addr() ルーチンは IPX アドレスを表現する文字列を解釈し、 システムコールに渡すのに適したバイナリ情報を返します。 ipx_ntoa() ルーチンは IPX アドレスを引数にとり、 アドレスを一般に使われる次のような表記法で記述した ASCII 文字列として返します:

<ネットワーク番号>.<ホスト番号>.<ポート番号>

後につく 0 となるフィールドは抑制され、各番号は ipx_addr() の入力に適した 16 進数の形式で印字されます。 10 進数を越える数字が現れないフィールドは最後に ‘H’ が付加されます。

ipx_addr() と一般に使用される大部分の形式との互換性の確保に努力が注がれてきました。 最初に、アドレスは ピリオド ‘’. 、コロン ‘’: 、ポンド記号 ‘#’ の中から選んだ単一のセパレータで 1 フィールドから 3 フィールドに分割されます。 次に、各フィールドについてバイトセパレータ ( コロンまたはピリオド ) の有無を調べます。 バイトセパレータがある場合は、 分離されたバイトフィールドは 16 進数のニブルとして解釈されます。 全体はネットワーク順でのバイト上位に 0 を拡張したバイト列が ネットワークのバイト順で解釈されます。 次に、フィールドでのハイフンの有無を調べます。 ハイフンがある場合はフィールドはハイフンで 1000 の位を 区切る 10 進数表記の数であると見なされます。 次に、フィールドは以下のようなやり方で数として解釈されます。 すなわち、 (C のように ) 先行する ‘0x’ や、 (Mesa のように ) 後続の ‘H’ がある場合、または 10 進数を越える数字がある場合には、 フィールドは 16 進数であると解釈されます。 先行する ‘0’ があり、かつ 8 進数を越える数字が無い場合には、 フィールドは 8 進数であると解釈されます。 いずれにも該当しない場合には、 10 進数として変換されます。

戻り値
なし ( バグ を参照 ) 。

関連項目
hosts(5), networks(5)

歴史
前身である ns_addr() 関数と ns_toa() 関数は 4.3BSD で登場しました。

バグ
ipx_ntoa() 関数が返す文字列は static メモリ領域に存在します。 ipx_addr() 関数は入力の不適切な形式を診断すべきです。 更に、このバグ診断を知るための曖昧さのない方策が必要です。