Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > X

xdr_create(3N)

HP-UX 11i Version 3: February 2007
» 

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index

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 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. Any buffers passed to the XDR routines must be properly aligned. It is suggested either 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. Private data structures associated with the stream are freed. 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 parameter op determines the direction of the XDR stream. The value of op can be either XDR_ENCODE, XDR_DECODE, or XDR_FREE. In the case where the value of size exceeds INT_MAX, xdrmem_create() resets size to INT_MAX.

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. 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. The value of op can be either XDR_ENCODE, XDR_DECODE, or XDR_FREE.

Warning: the destroy routine associated with such XDR streams calls fflush() on the file stream, but never fclose() (see fclose(3S)).

Failure of the xdrrec_create() function can be detected by first initializing the x_ops field in the XDR structure (xdrsx_ops) to NULL before calling the xdrrec_create() function. After the return from the xdrrec_create() function, if the x_ops field is still NULL, the call has failed. If the x_ops field contains some other value, assume the call has succeeded. Failures cannot be detected for the xdrmem_create() and xdrstdio_create() functions.

MULTITHREAD USAGE

Thread Safe:

Yes

Cancel Safe:

Yes

Fork Safe:

No

Async-cancel Safe:

No

Async-signal Safe:

No

These functions can be called safely in a multithreaded environment. They may be cancellation points in that they call functions that are cancel points.

In a multithreaded environment, these functions are not safe to be called by a child process after fork() and before exec(). These functions should not be called by a multithreaded application that supports asynchronous cancellation or asynchronous signals.

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.