xdr_create(3N) xdr_create(3N)
NAME
xdrcreate: xdrdestroy, xdrmemcreate, xdrreccreate, xdrstdiocreate
- Bibliotheksroutinen zur Erzeugung von Handles für die externe Daten-
darstellung
BESCHREIBUNG
XDR-Bibliotheksroutinen ermöglichen C-Programmierern die maschinenun-
abhängige Darstellung beliebiger Datenstrukturen. Protokolle wie RPC
verwenden diese Routinen für die Beschreibung ihrer Datenformate.
Diese Routinen haben mit der Erzeugung von XDR-Handles zu tun. Bevor
Daten in ein XDR-Format umgesetzt werden können, müssen XDR-Handles
erzeugt werden.
Wenn Sie eine der XDR-Funktionen verwenden, müssen Sie bei der Über-
setzung die Bibliothek libnsl dazubinden (cc -lnsl).
Routinen
Die Definition der Datenstrukturen XDR, CLIENT und SVCXPRT ist in
rpc(3N) zu finden.
#include <rpc/xdr.h>
void
xdrdestroy(XDR *xdrs);
Dies ist ein Makro, das die Löschroutine für den XDR-Handle xdrs
aufruft. Das Löschen schließt gewöhnlich die Freigabe privater
Datenstrukturen, die mit dem Stream verbunden sind, mit ein. Die
Benutzung von xdrs ist nach einem Aufruf von xdrdestroy nicht
definiert.
void
xdrmemcreate(XDR *xdrs, const caddrt addr,
const uint size, const enum xdrop op);
Diese Routine initialisiert den XDR-Handle, auf den xdrs ver-
weist. Die Daten des Handle werden von einem Puffer gelesen bzw.
auf ein Pufferstück geschrieben, das sich bei addr befindet und
die Länge size besitzt. op bestimmt die anfängliche Operation auf
den Daten (entweder XDRENCODE, XDRDECODE oder XDRFREE).
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
xdr_create(3N) xdr_create(3N)
void
xdrreccreate(XDR *xdrs, const uint sendsz,
const uint recvsz, const caddrt handle,
const int (*readit)(const void *, char *, const int),
const int (*writeit)(const void *, const char *, const int));
Diese Routine initialisiert den XDR-Handle, auf den xdrs ver-
weist. Der Schreibpuffer für XDR-kodierte Daten ist sendsz Bytes
groß. Der Wert 0 zeigt an, daß das System einen geeigneten Stan-
dardwert wählen soll. Die Größe des Lesepuffers beträgt recvsz
Bytes und kann ebenfalls durch Angabe von 0 auf einen Standard-
wert gesetzt werden. Die Funktion writeit wird aufgerufen, wenn
der Schreibpuffer voll ist. Umgekehrt wird die Funktion readit
aufgerufen, wenn der Lesepuffer leer ist und mit Daten gefüllt
werden soll. Das Verhalten dieser beiden Routinen ist den System-
aufrufen read(2) und write(2) sehr ähnlich, mit dem Unterschied,
daß statt Dateideskriptoren an die zwei Routinen ein handle
(CLIENT oder SVCXPRT) als erster Parameter übergeben wird.
Hinweis: Das Feld op des XDR-Handle muß vom Aufrufer gesetzt wer-
den.
Warnung:
xdrreccreate() erzeugt einen XDR-Handle, der die XDR-Daten in
Sätze aufteilt. In die eigentlichen Daten sind daher Satzmarken
eingebettet.
void
xdrstdiocreate(XDR *xdrs, FILE *file, const enum xdrop op);
Diese Routine initialisiert den XDR-Handle, auf den xdrs ver-
weist. Der Handle verweist auf die XDR-Daten. Die Daten des XDR-
Handle werden auf den Standard-E/A-Stream file geschrieben bzw.
werden von ihm gelesen. Der Parameter op bestimmt die anfängliche
Operation auf den Daten (entweder XDRENCODE, XDRDECODE oder
XDRFREE).
Warnung:
Die Löschroutine dieser XDR-Handle ruft auf dem file-Stream
fflush auf, jedoch niemals ein fclose(3S).
SIEHE AUCH
read(2), write(2), rpc(3N), xdradmin(3N), xdrcomplex(3N),
xdrsimple(3N), fclose(3S).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98