プログラミングインタフェース

その他のルーチン

その他にも、名前とアドレスの操作を簡易化するルーチンはいくつかあります。次の表に、可変長のバイト列、およびバイトスワッピングのネットワークアドレスと値を要約します。

表 8–2 実行時ライブラリルーチン

インタフェース 

機能説明 

memcmp(3C)

バイト列を比較する。同じ場合は 0、異なる場合は 0 以外の値を返す

memcpy(3C)

s2n バイトを s1 にコピーする

memset(3C)

base の最初の n バイトの領域に値 value を割り当てる

htonl(3SOCKET)

ホストからネットワークへの 32 ビット整数バイトオーダー変換 

htons(3SOCKET)

ホストからネットワークへの 16 ビット整数バイトオーダー変換 

ntohl(3SOCKET)

ネットワークからホストへの 32 ビット整数バイトオーダー変換 

ntohs(3SOCKET)

ネットワークからホストへの 16 ビット整数バイトオーダー変換 

バイトスワッピングルーチンを使用するのは、アドレスはネットワークオーダーで供給されるとオペレーティングシステムが考えるためです。一部のアーキテクチャーでは、ホストバイトオーダーがネットワークバイトオーダーと異なるため、プログラムは必要に応じて値をバイトスワップする必要があります。そのため、ネットワークアドレスを返すルーチンは、ネットワークオーダーで返します。バイトスワッピング問題が発生するのは、ネットワークアドレスを解釈する場合だけです。たとえば、次のコードは TCP ポートまたは UDP ポートをフォーマットします。

printf("port number %d\n", ntohs(sp->s_port));

これらのルーチンを必要としないマシンでは、アドレスは NULL マクロとして定義されます。