table of contents
        
      
      
    | XDR(3N) | XDR(3N) | 
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¶
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.
eXternal Data Representation: Sun Technical Notes
XDR: External Data Representation Standard, RFC1014, Sun Microsystems, Inc., USC-ISI.
| 16 febrero 1988 |