Sie sind auf Seite 1von 11

Lenguaje XDR y RPC

XDR (Representación de datos externos)

• RPC asume la existencia de XDR, un conjunto de rutinas de


biblioteca que permiten a un programador de C describir
estructuras de datos arbitrarias de una manera independiente de
la máquina. XDR es útil para transferir datos entre diversas
arquitecturas de computadora y se ha utilizado para comunicar
datos entre máquinas tan diversas como las computadoras
IRIS, VAX, IBM PC y Cray.
• XDR permite que RPC maneje estructuras de datos arbitrarias,
independientemente del orden de bytes de una máquina o de las
convenciones de diseño de la estructura, al convertir las
estructuras de datos a XDR antes de enviarlas a través del cable.
• La tarea de convertir desde una representación particular al formato XDR
se conoce como serialización; mientras que el proceso inverso se denomina
deserialización.

• El enfoque utilizado por XDR para estandarizar la representación de los


datos es el canónico, es decir, adhiere a reglas predefinidas y establecidas.
Cualquier programa ejecutándose en una máquina puede usar XDR para
crear datos portables mediante la traducción de su representación local al
estándar XDR; de la misma forma que inversamente un programa receptor
puede traducir dichos datos a su representación interna.
XDR proporciona soporte para los tipos de datos
listados a continuación:
• Enteros
• Enumerativos
• Booleanos
• Punto flotante
• Opaque
• Arreglos
• String
• Estructuras
• Uniones discriminadas
• Void
• Constantes
• Definición de tipos
• Datos opcionales (uniones particulares)
BIBLIOTECA XDR
• La biblioteca XDR no solo resuelve los problemas de portabilidad de datos, sino que
también le permite escribir y leer constructos de C arbitrarios de manera consistente,
específica y bien documentada. Por lo tanto, tiene sentido usar la biblioteca XDR,
incluso cuando los datos no se comparten entre máquinas en una red.

LENGUAJE XDR
Esta especificación utiliza una notación de formulario Backus-Naur extendida para
describir el lenguaje XDR. Esta notación tiene las siguientes características:

• Estos son los personajes especiales:


| () [] "*
• Los símbolos de terminal son cadenas de caracteres rodeados de comillas dobles ( "" ).
• Los símbolos no terminales son cadenas de caracteres no especiales.
• Los elementos alternativos están separados por una barra vertical ( | ).
• Los elementos opcionales están entre corchetes ( [] ).
• Los elementos se agrupan al encerrarlos entre paréntesis ( () ).
• Un asterisco ( * ) después de un artículo significa cero o más ocurrencias de ese
artículo.
• Por ejemplo

Consideramremos este patrón


"a" "muy" ("," "muy") * ["frío" "y"] "lluvioso" ("día" | "noche")

Un número infinito de cadenas coincide con este patrón; por ejemplo:

"un día muy lluvioso"


"un día muy, muy lluvioso"
"un día muy frío y lluvioso"
"una noche muy, muy, muy fría y lluviosa"
Notas Lexicas
• Esta sección trata sobre algunas características léxicas del lenguaje XDR:
• Los comentarios comienzan con / * y terminan con * /. Por ejemplo:
/ * comment * /
• El espacio en blanco separa los elementos y de lo contrario se ignora.
• Un identificador es una letra seguida de una secuencia opcional de
letras, dígitos o un guión bajo ( _ ). El caso de los identificadores no se
ignora.
• Una constante es una secuencia de uno o más dígitos decimales,
opcionalmente precedida por un signo menos ( - ).
const MAXUSERNAME = 32; / * longitud máxima de un nombre de usuario * /
const MAXFILELEN = 65535; / * longitud máxima de un archivo * /
const MAXNAMELEN = 255; / * longitud máxima de un nombre de archivo* /

/ * Tipos de archivos: * /
Ejemplo de descripción enum filekind {
TEXTO = 0, / * datos ascii * /
de datos XDR
DATA = 1, / * datos sin procesar * /
EXEC = 2 / * ejecutable * /
La siguiente es una breve };
descripción de datos XDR
/ * Información de archivo, por tipo de archivo: * /
de un "archivo" que puede union filetype switch (filekind kind) {
usar para transferir estuche TEXTO:
archivos de una máquina a vacío; / * no hay información adicional * /
DATOS del caso:
otra: creador de cadenas <MAXNAMELEN>; / * creador de datos * /
caso EXEC:
intérprete de cadenas <MAXNAMELEN>; / * intérprete de programas * /
};

/ * Un archivo completo: * /
archivo struct {
string nombre de archivo <MAXNAMELEN>; / * nombre del archivo * /
tipo de archivo; / * información sobre el archivo * /
propietario de la cadena <MAXUSERNAME>; / * propietario del archivo * /
datos opacos <MAXFILELEN>; / * datos de archivo * /
};
Lenguaje RPC

• Un IDL (Interface Definition Language) es un lenguaje utilizado para describir la interfaz


de un componente de software. Éste no es de ejecución sino declarativo, es decir, dice
lo que existe pero no cómo existe. Sun RPC emplea como IDL una ampliación del
lenguaje XDR que permite la definición de procedimientos. Este lenguaje es conocido
como RPCL (RPC Language) y es idéntico al lenguaje XDR, excepto en que agrega
definición para el programa y su versión.
Descripciones del lenguaje RPC
• Debido a que los tipos de datos XDR se describen en un lenguaje formal, los
procedimientos que operan en estos tipos de datos se deben describir en un lenguaje
formal. El RPCL, una extensión del lenguaje XDR, se usa para este propósito.
• RPC usa RPCL como el idioma de entrada para su protocolo y rutinas. RPCL especifica los
tipos de datos utilizados por RPC y genera rutinas XDR que estandarizan la
representación de los tipos. Para implementar rutinas y protocolos de servicio, RPCL
utiliza el comando rpcgen para compilar la entrada en el código de lenguaje C
correspondiente.
Definiciones
• Un archivo RPCL consiste en una serie de definiciones en el siguiente formato:
definición ";“

• RPCL reconoce los siguientes seis tipos de definiciones:


definición:
 enum-definition
 struct-definition
 union definition
 typedef-definition
 const-definición
 definition of the program
El RPCL tiene los siguientes requisitos de sintaxis:

• Las palabras clave de programa y versión se agregan y no se pueden usar como


identificadores.
• Un nombre de versión no puede aparecer más de una vez dentro del alcance de
una definición de programa. Tampoco puede aparecer un número de versión
más de una vez dentro del alcance de una definición de programa.
• Un nombre de procedimiento no puede aparecer más de una vez dentro del
alcance de una definición de versión. Tampoco puede ocurrir un número de
procedimiento más de una vez dentro del alcance de una definición de versión.
• Los identificadores de programa están en el mismo espacio de nombre que
la constante y los identificadores de tipo .
• Solo las constantes sin signo se pueden asignar a definiciones
de programas , versiones y procedimientos .

Das könnte Ihnen auch gefallen