Demasiado sencillo para ser verdad, en si la unión de datos como su nombre lo dice, une o enlaza dos registros de variables para que puedan ser utilizados de una sola forma, pero en distintos métodos y obtener una salida de dos en una.
Las uniones de XDR son diferentes a las de C, ya que tienen un discriminante. Su sintaxis es la siguiente:
union tipo_union switch (int discriminante) {Hay que resaltar que una de las declaraciones de la unión puede ser de tipo void, lo que indica que en ese caso no hay datos asociados, o sea, no se transmitiría nada al enviar esa unión (sólo el valor del discriminante, claro). El único otro lugar donde puede aparecer un void en XDR es en la definición del argumento o del valor devuelto por una función. Este tipo XDR se proyecta en C como un tipo struct que contiene un tipo unión de C:
case valor1: declaración 1;
case valor2: declaración 2;
………………………
default: declaración N;
};
struct tipo_union {Nótese que en el código del cliente y del servidor habría que especificar el campo tipo_union_u para acceder a los campos más internos. Asimismo, si uno de los casos tiene asociada una definición void, en C desaparecería directamente esa declaración. Para aclarar el uso del tipo union de XDR, se presenta, a continuación, un ejemplo. Supóngase que se quiere definir un servicio RPC denominado read, que devuelve un valor Booleano que indica si la operación se realizó con éxito. En caso afirmativo, la función devuelve los datos leídos. El tipo XDR que define el valor devuelto por esa función de servicio podría ser el siguiente:
int discriminante;
union {
declaración 1;
declaración 2;
…………..
declaración N;
} tipo_union_u;
};
union read_res switch (bool exito) {Nótese que, suponiendo que tenemos una variable de ese tipo llamada resultado, para acceder a los datos habría que especificar lo siguiente:
case FALSE: void;
case TRUE: opaque datos<>;
};
resultado.read_res_u.datosFuente Original:
http://www.mitecnologico.com/Main/UnionesDeDatosUnion
No hay comentarios:
Publicar un comentario