XDR_CREATE(3NSL) Networking Services Library Functions XDR_CREATE(3NSL)
NAME
xdr_create, xdr_destroy, xdrmem_create, xdrrec_create,
xdrstdio_create - library routines for external data representation
stream creation
SYNOPSIS
#include <rpc/xdr.h>
void xdr_destroy(
XDR *xdrs);
void xdrmem_create(
XDR *xdrs,
const caddr_t addr,
const uint_t size,
const enum xdr_op op);
void xdrrec_create(
XDR *xdrs,
const uint_t sendsz,
const uint_t 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
The
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, which must be
created before any data can be translated into
XDR format.
Routines
See
rpc(3NSL) for the definition of the
XDR CLIENT and
SVCXPRT data
structures. Any buffers passed to the
XDR routines must be properly
aligned. Use
malloc(3C) to allocate these buffers or be sure that the
buffer address is divisible evenly by four.
xdr_destroy() A macro that invokes the destroy routine
associated with the
XDR stream,
xdrs. Private
data structures associated with the stream are
freed. Using
xdrs after
xdr_destroy() is
invoked is undefined.
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
op determines the direction of
the
XDR stream. The value of
op can be either
XDR_ENCODE,
XDR_DECODE, or
XDR_FREE.
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,
xdrrec_create() calls
readit.
The behavior of these two routines is similar to
the system calls
read() and
write(), 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. See
read(2) and
write(2),
respectively. The
XDR stream's
op field must be
set by the caller.
This
XDR stream implements an intermediate
record stream. Therefore, additional bytes in
the stream are provided for record boundary
information.
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. The value of
op can be either
XDR_ENCODE,
XDR_DECODE, or
XDR_FREE.
The destroy routine associated with
XDR streams
calls
fflush() on the
file stream, but never
fclose(). See
fclose(3C).
A failure of any of these functions can be detected by first
initializing the
x_ops field in the
XDR structure (
xdrs->
x_ops) to
NULL before calling the
xdr*_create() function. If the
x_ops field
is still
NULL, after the return from the
xdr*_create() function, the
call has failed. If the
x_ops field contains some other value,
assume that the call has succeeded.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | MT-Safe |
+---------------+-----------------+
SEE ALSO
read(2),
write(2),
fclose(3C),
malloc(3C),
rpc(3NSL),
xdr_admin(3NSL),
xdr_complex(3NSL),
xdr_simple(3NSL),
attributes(7) September 26, 2000 XDR_CREATE(3NSL)