Vous êtes sur la page 1sur 2

TP 3 Systèmes distribués

Introductionà RPCGEN

1. Programmed'obtention du temps en secondes


1.1 time ()
NOM
time - get time

SYNOPSIS
#include <sys/tlæes.h>
#include <time.h>

time_t time (tj_me t *tl-oc) ;


DESCRÏPTION
La foncti-on time(û) renvoie le temps en secondes depuis Le L/L/L970-
(0 est le poi_nteur nul1).

time_t est un tlpe f ong défini dans (syslt1pes. h>

EXEMPIE
main ( )
{
long clocks;
cl-ocks:time{0);
printf ("Le temps en secondes depuis l-e 1/a/I97O est : gd\n", c]ocks);
]

1.2 date.x
Ecrire le fichier de spécification date - x dfuvant le prograrrme RPC de numero 99, de version I, et
composé d'une seule procédure BIN_DATE appelée sans argument (void) et renvoyant un entier long.
Compiler ce fichier avec RPCGEN et observer le fichier date. h, particulièrement les déclarations
des procédures des souches seryour et client.

1.3 Procédures serveur

Le fichier date. c contiendra les procédures-serveur.Il ne faut pas oublier les #include.

#include <rpc,/rpc.h>
#i-nclude <stdio. h>
#incl-ude "date. h"
Ecrire la procédure-serveur qui sera appelée par la souche-serveur générée par RPCGEN (le deuxième
parametre est inutilisé)-
Attention ! Le nom des souches-serveur est construit différemment selon les sysfànes. Exemplg si la
version porte le numéro I :
- solaris : uhe procédure nommée pRoc dans le fichier . x doit s'appeler proc_1 ;
- Linux : une procédure nommée pRoc dans le fichier - x doit s'appeler pro.- l_svc.
Pour des raisons de compatibilitg on écrira un #ifdef pourtraiter Ia différence de nom :
#ifdef _SOLARIS_
* proc_1 (type_argument *-tgp, struct svc_req * inutilise)
tlnpe_retour
#else
* proc-l-svc(t1pe-argument *-tgp, struct svc-req * inutifise)
ttrpe retour
#enaif

Le symbole SoLARf S sera défini dans le makef ile ou à l'appel de gcc.

1.4 Progranrune eJ-ient


Sur le modèlevu en cours,écrirele programmeclient cl-ient . c qui appellela RPC BIN-DATE.
Attention ! Utiliser le protocoleUDP.

2 Procédurede décodagedu tempsen secondes


La fonction struct tm *localtime (time t *clock) renvoie un pointeur sur une strucfure
(située dans une zone statique) où a eté décodé Ie temps pointé par clock.
La structure tm est définie dans <time . h> :
struct tm {
int tm-seei /* seeonds after the nr-Lnute - [0' 61] */
*/
/* for leap seconds
int trn-min; l* minutes after the hour - [0, 59] */
i-nt tm_hour; ./* hour since midnight - [0, 23] */
*/
int tm-mday; /* day of the month - [1, 31]
*/
int tm-mon; /* months since January - [0, 11]
i-nt tm year; /* years since 1900 */
*/
int tm-wday; /* days since Sunday - [0' 6]
*l
int tm-yday; /* days since January 1 - [0' 365]
dayl-ight savings time *'/
int tm-isdst; /" fl.ag for alternate

On veut mjouter une procédure TM_DATE qui permet de décoder le temps obtenu avec BIN-DATE.
Cette procédure reçoit un long et renvoie une structure de type tnr-

2.L date.x
Il faut compléterle fichier de spécificationdate. x avec la déclarationd'une structureéquivalenteà
la structuretm- On ne pourrautiliser le nom tm car il provoqueradesconflits d'inclusion.
tr faut aussirajouterla déclarationde la nouvelleprocédure.

2.2 Procédures seryeur


I1 faut rajouter la procéduredansle fichier date . c.

2.3 Progranune client


Il faut rajouterdansle plogamme client client . c l'appel de la RPC TM_DATE.

2.4 Compilation
Le fichier date_xdr. c (générépar RPCGEN),qui contient les fonctions de gestionXDR de la
structurede type tm està compileravecls serveuret avec le clisnt.

2-5 En cas de panne sèche


Récupérerles fichiersdu répertoire-r ibaud / PUBLI c / SYSDI S/ T P1 -