Old stuff/ecole_etude_fac_de_pau/licence_3/systeme-distribues/tp4/xdr.c
(Deskargatu)
#include <rpc/rpc.h>
#include <stdio.h>
#include <stdlib.h>
int codage_donnees(char mem[], int taille) {
int pos;
// données à envoyer
int min1, min2, max1, max2;
double moy1, moy2;
min1 = 5; max1 = 12; moy1 = 8.2;
min2 = 9; max2 = 13; moy2 = 9.3;
// création du flot en encodage
XDR flot_xdr;
xdrmem_create(&flot_xdr, mem, taille, XDR_ENCODE);
// codage des données
if (!xdr_int(&flot_xdr, &min1)) return -1;
if (!xdr_int(&flot_xdr, &max1)) return -1;
if (!xdr_double(&flot_xdr, &moy1)) return -1;
if (!xdr_int(&flot_xdr, &min2)) return -1;
if (!xdr_int(&flot_xdr, &max2)) return -1;
if (!xdr_double(&flot_xdr, &moy2)) return -1;
pos = xdr_getpos(&flot_xdr);
xdr_destroy(&flot_xdr);
return pos;
} // codage_donnees
bool_t decodage_donnees(char *mem, int taille) {
// données à décoder du flot
int min1, min2, max1, max2;
double moy1, moy2;
// création du flot en encodage
XDR flot_xdr;
xdrmem_create(&flot_xdr, mem, taille, XDR_DECODE);
// décodage des données
if (!xdr_int(&flot_xdr, &min1)) return FALSE;
if (!xdr_int(&flot_xdr, &max1)) return FALSE;
if (!xdr_double(&flot_xdr, &moy1)) return FALSE;
if (!xdr_int(&flot_xdr, &min2)) return FALSE;
if (!xdr_int(&flot_xdr, &max2)) return FALSE;
if (!xdr_double(&flot_xdr, &moy2)) return FALSE;
xdr_destroy(&flot_xdr);
// affichage des données
printf("serie 1 : min = %d, max = %d, moy = %f\n", min1, max1, moy1);
printf("serie 2 : min = %d, max = %d, moy = %f\n", min2, max2, moy2);
return TRUE;
} // decodage_donnees
int main()
{
int nb;
bool_t res;
int TAILLEBUF=500;
char buffer[500]; // contiendra le flot
nb = codage_donnees(buffer, TAILLEBUF);
if (nb == -1) exit(1);
printf("*** codage reussi : nb = %d\n", nb);
res = decodage_donnees(buffer, TAILLEBUF);
if (!res) exit(1);
printf("*** fin du décodage\n");
}