Old stuff/ecole_etude_fac_de_pau/licence_3/systeme-distribues/tp4/xdr.c~
(Deskargatu)
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;
27
} // decodage_donnees
int nb;
bool_t res;
char buffer[TAILLEBUF]; // contiendra le flot
nb = codage_donnees(buffer, TAILLEBUF);
if (nb == -1) exit(1);
printf(''*** codage réussi : nb = %d\n'', nb);
res = decodage_donnees(buffer, TAILLEBUF);
if (!res) exit(1);
printf(''*** fin du décodage\n'');