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