char nomefile;
così l'ho dichiarata
ora vi posto tutto il codice:
codice:
/* server iterativo dell'applicazione echo che utilizza la select */

#include	"basic.h"
#include	"my_signal.h"

int
main(int argc, char **argv)
{
   FILE			*fd1;
   int			listend, connd, sockd;
   int			i, maxi, maxd,numero;
   int			ready, client[FD_SETSIZE];
   char			buff[MAXLINE],num[MAXLINE], nomefile, nome ,stringa, righe[MAXLINE],*riga;
   fd_set		rset, allset;
   ssize_t		n;
   struct sockaddr_in	servaddr, cliaddr;
   socklen_t		cliaddr_len;

   if( (listend = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        err_sys("errore in socket");

   bzero(&servaddr, sizeof(servaddr));
   servaddr.sin_family      = AF_INET;
   servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
   servaddr.sin_port        = htons(SERV_PORT);	

   if( (bind(listend, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0)
       err_sys("errore nella bind");

   if( listen(listend, LISTENQ) < 0 )
       err_sys("errore nella listen");

   maxd = listend;   /* inzializza il numero di descrittori */
   maxi = -1;
   for ( i = 0; i < FD_SETSIZE; i++)
       client[i] = -1; /* inizializza l'array client a -1 */

   FD_ZERO(&allset);   /* inizializza a zero tutti i descrittori */
   FD_SET(listend, &allset); /* setta il descrittore di ascolto */

   for ( ; ; ) {

       rset = allset;  
	/* setta l'insieme di descrittori da controllare in lettura */

       if( (ready = select(maxd+1, &rset, NULL, NULL, NULL)) < 0 )
	   err_sys("errore nella select");

       if( FD_ISSET(listend, &rset) ) {
	  /* se è arrivata una richiesta di connessione al socket di ascolto 
             viene invocata la accept e creato un socket di connessione */

	    cliaddr_len = sizeof(cliaddr);
	    if( (connd = accept(listend, (struct sockaddr *) &cliaddr, &cliaddr_len)) < 0) 
	        err_sys("errore nella accept");

	    for(i = 0; i < FD_SETSIZE; i++)
	        if( client[i] < 0 ) {
		/* scrive il descrittore del nuovo socket nel primo posto 
                   libero di client */

		   client[i] = connd;
		   break;
	        }
	    if( i == FD_SETSIZE ) /* non ci sono posti liberi in client */
	        err_quit("troppi client");
	    FD_SET(connd, &allset); 
             /* altrimenti inserisce connd tra i descrittori da controllare */

	    if( connd > maxd )
	        maxd = connd;
	    if( i > maxi )
	        maxi = i;
	    if( --ready <= 0 ) /* cicla fino a quando ci sono ancora descrittori
                                  leggibili da controllare */
	        continue;
        }

	for( i = 0; i <= maxi; i++ ) {
         /* controlla tutti i socket attivi per controllare se sono leggibili */

	     if( (sockd = client[i]) < 0 ) 
               /* se il descrittore non è stato selezionato viene saltato */

		 continue;

	     if ( FD_ISSET(sockd, &rset) ) {
		/* se sockd è leggibile invoca la readline */

	        if ( (n = readline(sockd, buff, MAXLINE)) == 0) {
		   /* se la connessione è stata chiusa dal client chiude il
                      descritore di connessione */

	            if( close(sockd) == -1 )
		        err_sys("errore nella close");
	            FD_CLR(sockd, &allset); 
		     /* rimuove sockd dalla lista dei socket da controllare */

	            client[i] = -1; /* cancella sockd da client */
	        }
	        else{
			sscanf(buff,"%s %s" ,nomefile,nome);
				if((nomefile==0) && (nome==0))fputs("Errore sscanf",stdout);
				fd1=fopen(nomefile,"r");
				if(fd1==NULL)fputs("Errore apertura file",stdout);
				for(; ;){
					riga=fgets(righe,MAXLINE,fd1);
					sscanf(buff,"%s %d",stringa,&numero);
					if(riga==NULL)break;
					if(nome==stringa){
								sprintf(num,"%d", numero);
								break;
					}
				}
				fclose(fd1);




                    if( writen(sockd,  num, strlen(num)) != strlen(num) )
			 err_sys("errore nella write");
		}
	        if ( --ready <= 0 )
		    break;
	    }
       }
   }

}