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