Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ xdr_complex(3N) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

rpc(3N)

xdr_complex(3N)                                             xdr_complex(3N)

NAME
     xdrcomplex: xdrarray, xdrbytes, xdropaque, xdrpointer,
     xdrreference, xdrstring, xdrunion, xdrvector, xdrwrapstring -
     Bibliotheksroutinen für die externe Datendarstellung

BESCHREIBUNG
     XDR-Bibliotheksroutinen ermöglichen C-Programmierern die maschinenun-
     abhängige Darstellung komplexer Datenstrukturen. Protokolle wie RPC
     verwenden diese Routinen für die Datendarstellung. Dies sind Routinen
     der XDR-Bibliothek für komplexe Datenstrukturen. Sie erfordern die
     Erzeugung von XDR-Handles [siehe xdrcreate(3N)].

     Wenn Sie eine der XDR-Funktionen verwenden, müssen Sie bei der Über-
     setzung die Bibliothek libnsl dazubinden (cc -lnsl).

   Routinen

     Die Definition der Datenstruktur XDR ist in rpc(3N) zu finden.

     #include <rpc/xdr.h>

     boolt
     xdrarray(XDR *xdrs, caddrt *arrp, uint *sizep,
          const uint maxsize, const uint elsize,
          const xdrproct elproc);

          xdrarray ist eine Umsetzung zwischen Arrays variabler Länge und
          ihrer entsprechenden externen Darstellung. Der Parameter arrp ist
          die Adresse des Zeiger auf das Array und sizep ist die Adresse
          der Größe des Arrays. Diese Größe darf maxsize nicht überschrei-
          ten. Der Parameter elsize ist die Größe (sizeof) eines einzelnen
          Array-Elements und elproc ist eine XDR-Routine, die die Umsetzung
          zwischen der C-Form der Array-Elemente und ihrer externen Dar-
          stellung vornimmt. Diese Routine liefert im Erfolgsfall 1 zurück,
          ansonsten 0.

     boolt
     xdrbytes(XDR *xdrs, char **sp, uint *sizep,
          const uint maxsize);

          xdrbytes ist eine Umsetzung zwischen Bytefolgen und ihrer exter-
          nen Darstellung. Der Parameter sp ist die Adresse des
          Bytefolgen-Zeigers. Die Länge der Bytefolge steht unter der
          Adresse sizep. Bytefolgen können nicht länger als maxsize sein.
          Die Routine liefert im Erfolgsfall 1 zurück, ansonsten 0.

     boolt
     xdropaque(XDR *xdrs, caddrt cp, const uint cnt);

          xdropaque ist eine Umsetzung zwischen "opaque"-Daten fester
          Größe und ihrer externen Darstellung. Der Parameter cp ist die
          Adresse des "opaque"-Objekts und cnt ist dessen Größe in Bytes.



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

xdr_complex(3N)                                             xdr_complex(3N)

          Die Routine liefert im Erfolgsfall 1 zurück, ansonsten 0.

     boolt
     xdrpointer(XDR *xdrs, char **objpp, uint objsize,
          const xdrproct xdrobj);

          entspricht xdrreference, mit dem Unterschied, daß NULL-Zeiger
          möglich sind, was bei xdrreference nicht der Fall ist. Somit
          kann xdrpointer rekursive Datenstrukturen darstellen, wie z. B.
          binäre Bäume oder verkettete Listen.

     boolt
     xdrreference(XDR *xdrs, caddrt *pp, uint size,
          const xdrproct proc);

          xdrreference verarbeitet auch Zeiger innerhalb Strukturen. Der
          Parameter pp ist die Adresse des Zeigers auf die Struktur. size
          ist die Größe (sizeof) der Struktur, auf die *pp verweist, und
          proc ist eine XDR-Prozedur, die die Umsetzung der Struktur von
          ihrer C-Darstellung in ihre externe Darstellung vornimmt. Die
          Routine liefert im Erfolgsfall 1 zurück, ansonsten 0.

          Warnung:

          Die Routine erlaubt keine NULL-Zeiger. Verwenden Sie dazu
          xdrpointer.

     boolt
     xdrstring(XDR *xdrs, char **sp, const uint maxsize);

          xdrstring ist eine Umsetzung von C-Zeichenketten in ihre ent-
          sprechende externe Darstellung. Zeichenketten dürfen nicht länger
          als maxsize sein.

          Hinweis: sp ist die Adresse des Zeichenkettenzeigers. Die Routine
          liefert im Erfolgsfall 1 zurück, ansonsten 0.

     boolt
     xdrunion(XDR *xdrs, enumt *dscmp, char *unp,
          const struct xdrdiscrim *choices,
          const boolt(*defaultarm)(const XDR *, const char *, const int));

          xdrunion transferiert zwischen einer "discriminated union" und
          ihrer entsprechenden externen Darstellung. Zuerst wird der Aus-
          wahlwert zur Unterscheidung der Struktur an der Stelle dscmp
          übertragen. Dieser Wert ist immer vom Typ enumt. Als nächstes
          wird die Union-Struktur, die unter der Adresse unp zu finden ist,
          umgesetzt. Der Parameter choices ist ein Zeiger auf ein Array,
          das Strukturen des Typs xdrdiscrim als Elemente besitzt. Jede
          Struktur enthält ein geordnetes Paar der Form [value, proc].
          Falls der Auswahlwert zur Unterscheidung der Union-Struktur
          gleich dem entsprechenden Wert value ist, wird die Routine proc


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

xdr_complex(3N)                                             xdr_complex(3N)

          aufgerufen, um eine Umsetzung der Union-Struktur durchzuführen.
          Das Ende des xdrdiscrim-Strukturen-Arrays wird durch eine Rou-
          tine mit dem Wert NULL gekennzeichnet.



















































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

xdr_complex(3N)                                             xdr_complex(3N)

          Wenn der Auswahlwert nicht im Array choices gefunden wird, wird
          die Prozedur defaultarm aufgerufen (wenn diese nicht NULL ist).
          Die Routine liefert im Erfolgsfall 1 und im Fehlerfall 0 zurück.

     boolt
     xdrvector(XDR *xdrs, char *arrp, const uint size,
          const uint elsize, const xdrproct elproc);

          xdrvector ist eine Umsetzung zwischen Arrays fester Länge und
          ihrer externen Darstellung. Der Parameter arrp ist die Adresse
          des Zeigers auf das Array und size enthält die Anzahl der Ele-
          mente des Arrays. Der Parameter elsize ist die Größe (sizeof)
          eines Array-Elements. elproc ist eine XDR-Routine, die eine
          Umsetzung zwischen der C-Form des Elements und dessen externer
          Darstellung vornimmt. Die Routine liefert im Erfolgsfall 1
          zurück, ansonsten 0.

     boolt
     xdrwrapstring(XDR *xdrs, char **sp);

          Diese Routine ruft xdrstring(xdrs, sp, maxuint) auf, wobei maxu-
          int der maximale Wert einer vorzeichenlosen Ganzzahl ist.

          Viele Routinen wie xdrarray, xdrpointer und xdrvector erwarten
          einen Zeiger auf eine Funktion vom Typ xdrproct, die zwei Argu-
          mente erwartet. xdrstring, das sehr häufig verwendet wird,
          erwartet drei Argumente. xdrwrapstring erwartet hingegen nur
          zwei Argumente. Für diese Routinen ist xdrwrapstring sehr nütz-
          lich. Die Routine liefert im Erfolgsfall 1 zurück, ansonsten 0.

SIEHE AUCH
     rpc(3N), xdradmin(3N), xdrcreate(3N), xdrsimple(3N).






















Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026