Grazie per aver risposto!
Per RPC intendo REMOTE PROCEDURE CALL (tipo Sun RPC);
Posto il main ("Client") e il file .x per generare il .h con rpcgen e per ultimo il file del server che contiene la definizione della procedura remota
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////codice:#include <stdio.h> #include <rpc/rpc.h> #include"lista.h" main(int argc, char *argv[]) { CLIENT *cl; int *result = NULL; char ch; NuovoCandidato nuovoCand; Input in; char * server; if(argc< 2) { printf("\n Errore...to many parametres.."); exit(1); } server = argv[1]; cl = clnt_create(server, VOTAZIONIPULITE,VOTAZIONIPULITEVERS, "udp"); if(cl == NULL) { clnt_pcreateerror(server); exit(1); } // dati input do { printf("\nInserire l-operazione : A = aggiungi candidato \t B= ottieni totale voti \n\n"); ch = getchar(); fgetc(stdin); // elimino l'invio... if( ch == 'A') { printf("Inserisci la lista candidato:"); scanf("%s", nuovoCand.lista); fgetc(stdin); // elimino l'invio... printf("\nNome candidato: "); scanf("%s", nuovoCand.nome); fgetc(stdin); // elimino l'invio... printf("\ninvio dati %s e %s ", nuovoCand.nome, nuovoCand.lista); result = inserimento_candidato_1(&nuovoCand, cl); if(*result >= 0) { printf("\nOperazione completata con successo...candidato %s..aggiunto", nuovoCand.nome); } else { printf("\nErrore nella rpc..."); } } if( ch == 'B') { printf("Inserisci il nome della lista: "); scanf("%s", in.lista); fgetc(stdin); // elimino l'invio... result = visualizzazzione_voti_lista_1(&in, cl); if(result == NULL) { clnt_perror(cl, server); exit(1); } if(*result >= 0) { printf("\nOperazione completata con successo..voti:%i..", *result); } else { printf("\nErrore nella rpc..."); } } }while(ch != EOF); clnt_destroy(cl); exit(0); }
file .x per rpcgen
[/CODE]
const DIM_NOME_LISTA= 15;
const DIM_COALIZIONE = 15;
const DIM_NOME = 15;
const N = 10;
struct Lista{ char lista[DIM_NOME_LISTA]; char coalizione[DIM_COALIZIONE];};
struct Liste{ Lista liste[N];};
struct Candidato{ char nome[DIM_NOME]; char nome_lista[DIM_NOME_LISTA]; int value;};
struct Candidati {Candidato candidato[N];};
struct NuovoCandidato{ char nome[DIM_NOME]; char lista[DIM_NOME_LISTA];};
struct Input{ char lista[DIM_NOME_LISTA];};
program VOTAZIONIPULITE {
version VOTAZIONIPULITEVERS
{
int VISUALIZZAZZIONE_VOTI_LISTA(Input) = 1;
} = 1;
} = 0x20000013;
[CODE]
file che implementa le procedure per il server remoto posto solo 1 procedura con la funzione inizializza()
codice:#include <stdio.h> #include <rpc/rpc.h> #include<string.h> #include"lista.h" static int inizial = 0; static Candidati candidati; static Liste elencoliste; void inizializza() { int i; if(inizial == 1) { printf("\n\n\n inizializ vale %i", inizial); return; } else { for(i = 0; i< N; i++) { printf("\n inizia la procedura di preparazione di candidati..."); candidati.candidato[i].nome[0] = '\0'; candidati.candidato[i].nome_lista[0] = '\0'; candidati.candidato[i].value = 0; printf("inizializzato candidato %i", i); } for(i = 0; i< N; i++) { elencoliste.liste[i].lista[0] = '\0'; elencoliste.liste[i].coalizione[0] ='\0'; printf("\ninizializzato candidato %i", i); } printf("\nRiempimento struttura liste e check inizializzazzione....."); strcpy(elencoliste.liste[0].lista,"nulla"); strcpy(elencoliste.liste[0].coalizione,"nulla"); strcpy(elencoliste.liste[1].lista,"cataldi"); strcpy(elencoliste.liste[1].coalizione,"cater bruno"); strcpy(elencoliste.liste[2].lista,"valer"); strcpy(elencoliste.liste[2].coalizione,"rita d-avorio"); strcpy(elencoliste.liste[3].lista,"aldi"); strcpy(elencoliste.liste[3].coalizione,"poiater rino"); strcpy(candidati.candidato[0].nome_lista ,"aldi"); strcpy(candidati.candidato[0].nome ,"gianluigi piero"); candidati.candidato[0].value = 3; strcpy(candidati.candidato[3].nome_lista ,"aldi"); strcpy(candidati.candidato[3].nome ,"gianluigi piero"); candidati.candidato[3].value = 3; for(i = 0; i< N; i++) { printf("elencoListe %i esimo: %s e %s", i, elencoliste.liste[i].lista, elencoliste.liste[i].coalizione); } inizial= 1; printf("\nValore di inizial posto ad %i", inizial); return; } } int * visualizzazzione_voti_lista_1_svc(Input *name, struct svc_req * rqstp) { int i; int valore = 0; static int result = -1; printf("\nSono qui....nome lista richiesta:%s", name->lista); inizializza(); printf("\nDopo inizializza......nome lista richiesta:%s", name->lista); for(i = 0; i<N; i++) { if(strcmp(name->lista, elencoliste.liste[i].lista)== 0) { valore = 0; break; } valore = -1; } if(valore < 0 ) // non esiste la lista return (&result); for( i = 0; i<N; i++) { if(strcmp(name->lista, candidati.candidato[i].nome_lista)== 0) { result += candidati.candidato[i].value; } } return (&result); }

Rispondi quotando