XDR の使用例

このセクションでは、 eXternal データ表現 (XDR) ルーチンについて説明します。

プロセス間で個人の総資産と総負債を交換すると想定します。 また、これらの値が、独自のデータ・タイプを保証するのに十分な重要性を持つことを前提とします。

struct gnumbers {
   long g_assets;
   long g_liabilities;
};
この構造を記述する、対応する eXternal データ表現 (XDR) ルーチンは、次のようになります。

bool_t      /*  TRUE is success, FALSE is failure  */
xdr_gnumbers(xdrs, gp)
   XDR *xdrs;
   struct gnumbers *gp;
{
   if (xdr_long(xdrs, &gp->g_assets) &&
      xdr_long(xdrs, &gp->g_liabilities))
      return(TRUE);
   return(FALSE);
}

このxdrsパラメーターは、サブコンポーネント・ルーチンに渡される前に検査も変更もされません。 ただし、プログラムは常に各 XDR ルーチン呼び出しの戻り値を検査し、サブルーチンが失敗した場合は即時にあきらめて False を返す必要があります。

この例では、 bool_t 型が、以下の値のみを持つ整数として宣言されていることも示しています。TRUE (1)およびFALSE (0). 本書では、以下の定義を使用しています。

#define bool_t     int
#define TRUE       1
#define FALSE      0
これらの規則に留意して、 xdr_gnumbers ルーチンは次のように書き直すことができます。

xdr_gnumbers(xdrs, gp)
   XDR *xdrs;
   struct gnumbers *gp;
{
   return(xdr_long(xdrs, &gp->g_assets) &&
      xdr_long(xdrs, &gp->g_liabilities));
}