Zuordnen von Speicher mit XDR
XDR-Routinen machen nicht nur Eingabe und Ausgabe, sondern auch Speicherzuordnung. Betrachten Sie die folgende XDR-Routine, xdr_chararr1, die sich mit einem festen Byte-Array mit Länge befasst.SIZE.
xdr_chararr1 (xdrsp, chararr)
XDR *xdrsp;
char chararr[];
{
char *p;
int len;
p = chararr;
len = SIZE;
return (xdr_bytes (xdrsp, &p, &len, SIZE));
}
char chararr [SIZE];
svc_getargs (transp, xdr_chararr1, chararr);
xdr_chararr2 (xdrsp, chararrp)
XDR *xdrsp;
char **chararrp;
{
int len;
len = SIZE;
return (xdr_bytes (xdrsp, charrarrp, &len, SIZE));
}
char *arrptr;
arrptr = NULL;
svc_getargs (transp, xdr_chararr2, &arrptr);
/*
*Use the result here
*/
svc_freeargs (transp, xdr_chararr2, &arrptr);
Das Zeichenarray kann mit dem Makro svc_freeargs freigegeben werden. Diese Operation versucht nicht, Speicher in der Variablen freizugeben, was darauf hinweist, dass die Variable null ist.
Jede XDR-Routine ist für die Serialisierung, Deserialisierung und Freigabe von Speicher verantwortlich. Wenn eine XDR-Routine von der Routine callrpc aufgerufen wird, wird der Serialisierungsabschnitt verwendet. Wenn eine XDR-Routine von der Routine svc_getargs aufgerufen wird, wird der Deserializer verwendet. Wenn eine XDR-Routine von der Routine svc_freeargs aufgerufen wird, wird die Speicherzuordnungsfunktion verwendet.