Tfe

Ongi etorri tfe-ren webgunera...

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");
}