XDR
Section: Network Functions (3N)
Updated: 16 febrero 1988
Index Return to Main
Contents
NOMBRE
xdr - rutinas de biblioteca para la representación externa de datos
SINOPSIS Y DESCRIPCIÓN
Estas rutinas permiten a los programadores de C describir
estructuras de datos arbitrarias de una forma independiente de la
máquina. Los datos para las llamadas a procedimientos remotos se
transmiten usando estas rutinas.
xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc)
XDR *xdrs;
char **arrp;
u_int *sizep, maxsize, elsize;
xdrproc_t elproc;
- Una primitiva de filtro que convierte arrays de longitud
variable a sus correspondientes representaciones externas y
viceversa. El parámetro arrp es la dirección del puntero al
array, mientras que sizep es la dirección del contador de
elementos del array. Este contador de elementos no puede exceder
maxsize. El parámetro elsize es el sizeof de
cada uno de los elementos del array, y elproc es un filtro
XDR que convierte entre el formato en C de
los elementos del array y su representación externa. Esta rutina
devuelve uno si tiene éxito y cero en caso contrario.
xdr_bool(xdrs, bp)
XDR *xdrs;
bool_t *bp;
- Una primitiva de filtro que convierte booleanos (enteros de C)
a sus representaciones externas y viceversa. Cuando se condifican
datos, este filtro produce valores de uno o de cero. Esta rutina
devuelve uno si tiene éxito y cero en caso contrario.
xdr_bytes(xdrs, sp, sizep, maxsize)
XDR *xdrs;
char **sp;
u_int *sizep, maxsize;
- Una primitiva de filtro que convierte cadenas de bytes contadas
a sus representaciones externas y viceversa. El parámetro sp
es la dirección del puntero a la cadena. La longitud de la cadena
se encuentra en la dirección sizep. Las cadenas no pueden
ser más largas que maxsize. Esta rutina devuelve uno si
tiene éxito y cero en caso contrario.
xdr_char(xdrs, cp)
XDR *xdrs;
char *cp;
- Una primitiva de filtro que convierte caracteres de C a sus
representaciones externas y viceversa. Esta rutina devuelve uno si
tiene éxito y cero en caso contrario. Nota: los caracteres
codificados no se empaquetan y cada uno ocupa 4 bytes. Para arrays
de caracteres, vale la pena considerar xdr_bytes(),
xdr_opaque() o xdr_string().
void
xdr_destroy(xdrs)
XDR *xdrs;
- Una macro que invoca a la rutina de destrucción asociada con el
flujo XDR, xdrs. Usualmente, la
destrucción implica la liberación de estructuras de datos privadas
asociadas con el flujo. El uso de xdrs después de llamar a
xdr_destroy() es indefinido.
xdr_double(xdrs, dp)
XDR *xdrs;
double *dp;
- Una primitiva de filtro que convierte números de precisión
doble de C (double) a sus representaciones externas y
viceversa. Esta rutina devuelve uno si tiene éxito y cero en caso
contrario.
xdr_enum(xdrs, ep)
XDR *xdrs;
enum_t *ep;
- Una primitiva de filtro que convierte enumerados de C
(enums) (enteros en realidad) a sus representaciones
externas y viceversa. Esta rutina devuelve uno si tiene éxito y
cero en caso contrario.
xdr_float(xdrs, fp)
XDR *xdrs;
float *fp;
- Una primitiva de filtro que convierte números flotantes de C
(floats) a sus representaciones externas y viceversa. Esta
rutina devuelve uno si tiene éxito y cero en caso contrario.
void
xdr_free(proc, objp)
xdrproc_t proc;
char *objp;
- Rutina genérica de liberación. El primer argumento es la rutina
XDR para que libera el objeto. El segundo
argumento es un puntero al propio objeto. Nota: no se libera
el puntero pasado a esta rutina, sino a lo que él apunta (de
forma recursiva).
u_int
xdr_getpos(xdrs)
XDR *xdrs;
- Una macro que llama a la rutina "obtener posición" asociada con
el flujo XDR, xdrs. La rutina
devuelve un entero sin signo que indica la posición en el flujo de
bytes XDR. Una caracterísitica deseable de
los flujos XDR es que la aritmética simple
funcione con este número, aunque las instancias de flujos XDR no necesitan garantizar esto.
long *
xdr_inline(xdrs, len)
XDR *xdrs;
int len;
- Una macro que llama a la rutina "en línea" asociada con el
flujo XDR, xdrs. La rutina devuelve
un puntero a una porción contigua del buffer del flujo. len
es la longitud en bytes del buffer deseado. Nota: el puntero se
convierte al tipo long *.
- Cuidado: xdr_inline() puede devolver NULL (0) si no puede reservar una porción contigua
de buffer. Por lo tanto, el comportamiento puede varias entre
instancias de flujo. Existe por el bien de la eficiencia.
xdr_int(xdrs, ip)
XDR *xdrs;
int *ip;
- Una primitiva de filtro que convierte enteros de C a sus
representaciones externas y viceversa. Esta rutina devuelve uno si
tiene éxito y cero en caso contrario.
xdr_long(xdrs, lp)
XDR *xdrs;
long *lp;
- Una primitiva de filtro que convierte enteros largos de C
(long) a sus representaciones externas y viceversa. Esta
rutina devuelve uno si tiene éxito y cero en caso contrario.
void
xdrmem_create(xdrs, addr, size, op)
XDR *xdrs;
char *addr;
u_int size;
enum xdr_op op;
- Esta rutina inicializa el objeto de flujo XDR apuntado por xdrs. Los datos del flujo
se escriben en, o se leen de, una porción de memoria en la posición
addr cuya longitud no es mayor que size bytes. El
op determina la dirección del flujo XDR (bien XDR_ENCODE, XDR_DECODE o XDR_FREE).
xdr_opaque(xdrs, cp, cnt)
XDR *xdrs;
char *cp;
u_int cnt;
- Una primitiva de filtro que convierte datos opacos de tamaño
fijo a sus representaciones externas y viceversa. El parámetro
cp es la dirección del objeto opaco y cnt es su
tamaño en bytes. Esta rutina devuelve uno si tiene éxito y cero en
caso contrario.
xdr_pointer(xdrs, objpp, objsize, xdrobj)
XDR *xdrs;
char **objpp;
u_int objsize;
xdrproc_t xdrobj;
- Como xdr_reference() salvo que serializa punteros NULL, mientras que xdr_reference() no lo
hace. Por tanto, xdr_pointer() puede representar estructuras
de datos recursivas, tales como árboles binarios o listas
enlazadas.
void
xdrrec_create(xdrs, sendsize, recvsize, handle, readit, writeit)
XDR *xdrs;
u_int sendsize, recvsize;
char *handle;
int (*readit) (), (*writeit) ();
- Esta rutina inicializa el objeto de flujo XDR apuntado por xdrs. Los datos del flujo
se escriben en un buffer de tamaño sendsize. Un valor cero
indica que el sistema debería usar un valor por omisión adecuado.
Los datos del flujo se leen de un buffer de tamaño recvsize.
Un valor cero también indica que se le asigne un valor por omisión
adecuado. Cuando un buffer de salida de un flujo se llena, se llama
a writeit. De igual forma, cuando un buffer de entrada de un
flujo está vacío, se llama a readit. El comportamiento de
estas rutinas es similar al de las llamadas al sistema read
y write, excepto que handle se pasa a las rutinas
anteriores como primer parámetro. Nota: el campo op del
flujo XDR debe ser asignado por el
invocador.
- Cuidado: este flujo XDR implanta un
flujo de registros intermedio. Por lo tanto, existen bytes
adicionales en el flujo para proporcionar información sobre límites
de registros.
xdrrec_endofrecord(xdrs, sendnow)
XDR *xdrs;
int sendnow;
- Esta rutina sólo puede llamarse sobre flujos creados por
xdrrec_create(). Los datos del buffer de salida se marcan
como un registro terminado y, opcionalmente, se escribe el buffer
de salida si sendnow no es cero. Esta rutina devuelve uno si
tiene éxito y cero en caso contrario.
xdrrec_eof(xdrs)
XDR *xdrs;
int empty;
- Sólo pueda llamarse a esta rutina sobre flujos creados por
xdrrec_create(). Después de consumir el resto del registro
actual en el flujo, esta rutina devuelve uno si el flujo no tiene
más datos de entrada y cero en caso contrario.
xdrrec_skiprecord(xdrs)
XDR *xdrs;
- Sólo pueda llamarse a esta rutina sobre flujos creados por
xdrrec_create(). Le dice a la implementación XDR que se debería descartar el resto del registro
actual en el buffer de entrada del flujo. Esta rutina devuelve uno
si tiene éxito y cero en caso contrario.
xdr_reference(xdrs, pp, size, proc)
XDR *xdrs;
char **pp;
u_int size;
xdrproc_t proc;
- Una primitiva que proporciona un seguimiento de punteros dentro
de estructuras. El parámetro pp es la dirección del puntero.
size es el sizeof de la estructura a la que apunta
*pp, y proc es un procedimiento XDR que filtra la estructura entre su formato en C
y su representación externa. Esta rutina devuelve uno si tiene
éxito y cero en caso contrario.
- Cuidado: esta rutina no entiende punteros NULL. Use xdr_pointer() en su lugar.
xdr_setpos(xdrs, pos)
XDR *xdrs;
u_int pos;
- Una macro que llama a la rutina de establecimiento de posición
con el flujo XDR xdrs. El parámetro
pos es el valor de posición obtenido de xdr_getpos().
Esta rutina devuelve uno si se podría reposicionar el flujo XDR y cero en caso contrario.
- Cuidado: es difícil reposicionar algunos tipos de flujos XDR, por lo que esta rutina puede fallar con un
tipo de flujo y tener éxito con otro.
xdr_short(xdrs, sp)
XDR *xdrs;
short *sp;
- Una primitiva de filtro que convierte enteros cortos de C
(short) a sus representaciones externas y viceversa. Esta
rutina devuelve uno si tiene éxito y cero en caso contrario.
void
xdrstdio_create(xdrs, file, op)
XDR *xdrs;
FILE *file;
enum xdr_op op;
- Esta rutina inicializa el flujo XDR
apuntado por xdrs. Los datos del flujo XDR se escriben en, o se leen de, el flujo de
E/S estándar file. El parámetro op determina
la dirección del flujo XDR (bien XDR_ENCODE, XDR_DECODE o XDR_FREE).
- Cuidado: la rutina de destrucción asociada con tales flujos
XDR llama a fflush() sobre el flujo
file, pero nunca a fclose().
xdr_string(xdrs, sp, maxsize)
XDR
*xdrs;
char **sp;
u_int maxsize;
- Una primitiva de filtro que convierte cadenas de C en sus
correspondientes representaciones externas y viceversa. Las
candenas no pueden ser más largas de maxsize. Nota:
sp es la dirección del puntero a la cadena. Esta rutina
devuelve uno si tiene éxito y cero en caso contrario.
xdr_u_char(xdrs, ucp)
XDR *xdrs;
unsigned char *ucp;
- Una primitiva de filtro que convierte caracteres sin signo de C
(unsigned char) a sus representaciones externas y viceversa.
Esta rutina devuelve uno si tiene éxito y cero en caso
contrario.
xdr_u_int(xdrs, up)
XDR *xdrs;
unsigned *up;
- Una primitiva de filtro que convierte enteros sin signo de C
(unsigned) a sus representaciones externas y viceversa. Esta
rutina devuelve uno si tiene éxito y cero en caso contrario.
xdr_u_long(xdrs, ulp)
XDR *xdrs;
unsigned long *ulp;
- Una primitiva de filtro que convierte enteros largos sin signo
de C (unsigned long) a sus representaciones externas y
viceversa. Esta rutina devuelve uno si tiene éxito y cero en caso
contrario.
xdr_u_short(xdrs, usp)
XDR *xdrs;
unsigned short *usp;
- Una primitiva de filtro que convierte enteros cortos sin signo
de C (unsigned short) a sus representaciones externas y
viceversa. Esta rutina devuelve uno si tiene éxito y cero en caso
contrario.
xdr_union(xdrs, dscmp, unp, choices, dfault)
XDR *xdrs;
int *dscmp;
char *unp;
struct xdr_discrim *choices;
bool_t (*defaultarm) (); /* may equal NULL */
- Una primitiva de filtro que convierte una union
discriminada de C a su correspondiente representación externa y
viceversa. Primero, convierte el discriminante de la unión
localizado en dscmp. Este discriminante siempre es un
enum_t. A continuación, se convierte la unión localizada en
unp. El parámetro choices es un puntero a un array de
estructuras xdr_discrim(). Cada estructura contiene un par
ordenado [value,proc]. Si el discriminante de la
unión es igual al value asociado, se llama a proc
para convertir la unión. El final del array de estructuras
xdr_discrim() se denota con una rutina de valor NULL. Si no se encuentra el discriminante en el
array choices, se llama al procedimiento defaultarm
(si no es NULL). Devuelve uno si tiene éxito
y cero en caso contrario.
xdr_vector(xdrs, arrp, size, elsize, elproc)
XDR *xdrs;
char *arrp;
u_int size, elsize;
xdrproc_t elproc;
- Una primitiva de filtro que convierte arrays de longitud fija a
sus correspondientes representaciones externas y viceversa. El
parámetro arrp es la dirección del puntero al array,
mientras que size es el número de elementos del array. El
parámetro elsize es el sizeof de cada uno de los
elementos del array y elproc es un flitro XDR que traduce entre el formato en C de los
elementos del array y sus representaciones externas. Esta rutina
devuelve uno si tiene éxito y cero en caso contrario.
xdr_void()
- Esta rutina siempre devuelve uno. Se puede pasar a rutinas
RPC que necesitan una parámetro función
donde no se va a hacer nada.
xdr_wrapstring(xdrs, sp)
XDR *xdrs;
char **sp;
- Una primitiva que llama a xdr_string(xdrs, sp,MAXUN.UNSIGNED); donde MAXUN.UNSIGNED es el valor máximo de un
entero sin signo. xdr_wrapstring() es adecuada porque el
paquete RPC pasa un máximo de dos rutinas
XDR como parámetros y xdr_string(),
una de las primitivas usadas con más frecuencia, necesita tres.
Devuelve uno si tiene éxito y cero en caso contrario.
VÉASE TAMBIÉN
rpc(3N)
Los siguientes manuales:
- eXternal Data Representation Standard: Protocol
Specification
eXternal Data Representation: Sun Technical Notes
XDR: External Data Representation
Standard, RFC1014, Sun Microsystems,
Inc., USC-ISI.
Index
- NOMBRE
- SINOPSIS Y DESCRIPCIÓN
- VÉASE TAMBIÉN
This document was created by man2html, using
the manual pages.
Time: 06:16:24 GMT, January 22, 2005