HP-UX Reference (11i v2 07/12) - 3 Library Functions N-Z (vol 7)

x
xdr_create(3N) xdr_create(3N)
NAME
xdr_create(), xdr_destroy(), xdrmem_create(), xdrrec_create(), xdrstdio_create() - library routines for exter-
nal data representation stream creation
SYNOPSIS
#include <rpc/xdr.h>
void xdr_destroy(XDR *
xdrs);
void xdrmem_create(XDR *
xdrs, const caddr_t addr
, const u_int size,
const enum xdr_op
op);
void xdrrec_create(XDR *
xdrs, const u_int sendsz
, const u_int recvsz,
const caddr_t
handle, const int (*readit
)(const void *read_handle,
char *
buf, const int len),
const int (*
writeit)(const void *write_handle
, const char *buf,
const int
len));
void xdrstdio_create(XDR *
xdrs, FILE *
file, const enum xdr_op op);
DESCRIPTION
XDR library routines allow C programmers to describe arbitrary data structures in a machine-independent
fashion. Protocols such as remote procedure calls (RPC) use these routines to describe the format of the
data.
These routines deal with the creation of XDR streams. XDR streams have to be created before any data
can be translated into XDR format.
Routines
See rpc(3N) for the definition of the XDR, CLIENT, and SVCXPRT data structures. Note that any buffers
passed to the XDR routines must be properly aligned. It is suggested that malloc(3C) be used to allocate
these buffers or that the programmer insure that the buffer address is divisible evenly by four.
void xdr_destroy()
A macro that invokes the destroy routine associated with the XDR stream, xdrs. Destruction usually
involves freeing private data structures associated with the stream. Using xdrs after invoking
xdr_destroy() is undefined.
void xdrmem_create()
This routine initializes the XDR stream object pointed to by xdrs. The stream’s data is written to, or
read from, a chunk of memory at location addr whose length is no less than size bytes long. The
xdrmem_create() routine resets the size to
INT_MAX in case the value of size exceeds
INT_MAX. The op determines the direction of the XDR stream (either XDR_ENCODE ,
XDR_DECODE ,orXDR_FREE).
void xdrrec_create()
This routine initializes the read-oriented XDR stream object pointed to by xdrs. The stream’s data is
written to a buffer of size sendsz; a value of 0 indicates the system should use a suitable default. The
stream’s data is read from a buffer of size recvsz; it too can be set to a suitable default by passing a
0
value. When a stream’s output buffer is full, writeit is called. Similarly, when a stream’s input buffer
is empty, readit is called. The behavior of these two routines is similar to the system calls read()
and write() (see read(2) and write(2), respectively), except that an appropriate handle
(read_handle or write_handle) is passed to the former routines as the first parameter instead of a file
descriptor. Note: the XDR stream’s op field must be set by the caller.
Warning: this XDR stream implements an intermediate record stream. Therefore there are additional
bytes in the stream to provide record boundary information.
void xdrstdio_create()
This routine initializes the XDR stream object pointed to by xdrs. The XDR stream data is written to,
or read from, the standard I/O stream file. The parameter op determines the direction of the XDR
stream (either XDR_ENCODE , XDR_DECODE ,orXDR_FREE).
Warning: the destroy routine associated with such XDR streams calls fflush() on the file stream,
but never fclose() (see fclose(3S)).
Failure of xdrrec_create() function can be detected by first initializing the x_ops field in the XDR
structure (xdrs -> x_ops)toNULL before calling the xdrrec_create() function. After the return from
HP-UX 11i Version 2: December 2007 Update − 1 − Hewlett-Packard Company 649