/* Gestion d'un index telephonique (pour etre server RPC avec rpcgen) fichier donnee: lignes ascii de la forme "nom telephone(entier)" */ #include #include #include "index.h" #define NOM_FICHIER "index.data" /* Recherche de la ligne contenant le nom correspondant... */ #define TAILLECHAR 256 static ligne entree; static char buf[TAILLECHAR]; ligne * recherche_1_1_svc(char ** nom, struct svc_req * c) { FILE *f; int t; printf("test\n"); entree.nom = (char *)buf; entree.tel = 0; if ((f = fopen (NOM_FICHIER, "r")) == NULL) {perror ("svc: fopen ");} else { while ( fscanf(f,"%s%d", buf, &t ) != EOF ) { if ( !strcmp( *nom, buf) ) { entree.tel = t; fclose ( f ); return ( &entree ); } } fclose ( f ); } /* entry not found: return empty string */ entree.nom[0] = '\0'; printf("test\n"); return ( &entree ); } /* Ajout d'une ligne si pas deja presente... */ static int status_ajout; int * ajout_1_1_svc(ligne * a_ajouter, struct svc_req *c) { FILE *f; ligne *test; printf("test\n"); status_ajout = 0; test = recherche_1_1_svc ( &(a_ajouter->nom), c ); if ( ! (test->tel) ) { f = fopen ( NOM_FICHIER, "a" ); fprintf (f, "%s %d\n", a_ajouter->nom, a_ajouter->tel); fclose(f); status_ajout = 1; } return ( &status_ajout ); } /* Affiche une chaine de caractere... */ void * affiche_1_1 ( char ** s ) { printf ( "%s\n", *s ); fflush (stdout); return ((void *)1); } /* ============================================================ */ liste_ligne * listing_1_1_svc(void *a, struct svc_req *c) /* ============================================================ */ { FILE *f; int t; liste_ligne lst_lig; liste_ligne *lst_tmp; printf("Test1\n"); if ((f = fopen (NOM_FICHIER, "r")) == NULL) {perror ("svc: fopen ");} else { //Si la premiere ligne n'est pas vide, on la recupere if ( fscanf(f,"%s%d", buf, &t ) != EOF ){ lst_lig.lig.nom = malloc(TAILLECHAR); strcpy(lst_lig.lig.nom,buf); lst_lig.lig.tel = t; printf("Nom : %s, tel : %d\n",lst_lig.lig.nom, lst_lig.lig.tel); lst_tmp=lst_lig.ptr_lig; } //On recupere la suite si il y en a une while ( fscanf(f,"%s%d", buf, &t ) != EOF ) { lst_tmp= malloc(sizeof(liste_ligne)); lst_tmp->lig.nom = malloc(TAILLECHAR); strcpy(lst_tmp->lig.nom,buf); lst_tmp->lig.tel = t; printf("Nom : %s, tel : %d\n",lst_tmp->lig.nom, lst_tmp->lig.tel); lst_tmp = lst_tmp->ptr_lig; } fclose ( f ); } printf("Test2, lst_lig = %p\n", lst_lig); return &lst_lig; }/* listing_1_1_svc */