名前とアドレスの操作を簡易化するルーチンには、アドレスに関連するデータベースルーチンのほかにもいくつかあります。表 2-3 は、可変長のバイト列、およびバイトスワッピングのネットワークアドレスと値を要約したものです。
表 2-3 実行時ライブラリルーチン
呼び出し |
機能説明 |
---|---|
memcmp(3C) |
バイト列を比較する。同じ場合は 0、異なる場合は 0 以外の値を返す |
memcpy(3C) |
s2 の n バイトを 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 マクロとして定義されます。