Salve ragazzi...ho ancora un problema!!!Il programma che ho scritto viene compilato correttamente,ma non funziona...questo il server:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

typedef struct{
          char titolo[50];
          char autore[50];
          unsigned short disponibilita;       
          }Testo;
          
struct richiesta{
           char tit[50];
           char aut[50];
           pid_t pid;
           char msg[50];
           }msg;
           
           int main(void){
               int fd,fd1;
               pid_t pid;
               FILE *fp;
               Testo libri[10];
               char opz,PID_FIFO[100];
               char buffer[50];
               unsigned short i=0;     
               time_t start;
               
               mkfifo("WK_FIFO",0666); //creo la wk fifo
               
               start=time(NULL);
               while(difftime(time(NULL),start)<100.){
                    fd=open("WK_FIFO",O_RDONLY);
                    if(read(fd,&msg,sizeof(msg))<=0)
                    printf("Errore di lettura da WK_FIFO\n");
                    if(close(fd)<0)
                    printf("Errore chiusura WN_FIFO\n");
                    if(strcmp(msg.msg,"FINE")==0){                    //richiesta del client di chiudere la connessione
                                                  remove("WK_FIFO");
                                                  printf("Fine esecuzione\n");
                                                  exit(0);
                                                  }
                                                  
               fp=fopen("libri.txt","r");
               if(fp==NULL){
                            printf("Errore di lettura file!\n");
                            exit(1);
                            }                                   
                while(!feof(fp)){
                                 fgets(buffer,sizeof(buffer),fp);
                                 buffer[strlen(buffer)-1]='\0';
                                 strcpy(libri[i].titolo,buffer);
                                 
                                 fgets(buffer,sizeof(buffer),fp);
                                 buffer[strlen(buffer)-1]='\0';
                                 strcpy(libri[i].autore,buffer);
                                 
                                 fgets(buffer,sizeof(buffer),fp);
                                 libri[i].disponibilita=(unsigned short)atoi(buffer);
                                 i++;
                                 }                                     
                           
                           sprintf(PID_FIFO,"%d.FIFO",msg.pid);
                            mkfifo(PID_FIFO,0666);
                            fd1=open(PID_FIFO,O_WRONLY);         
                          for(i=0;i<10;i++){
                                            if((strcmp(libri[i].titolo,msg.tit))!=0||(strcmp(libri[i].autore,msg.aut))!=0){
                                                                    write(fd1, libri[i].titolo, strlen(libri[i].titolo));
                                                                     write(fd1, libri[i].autore, strlen(libri[i].autore));
                                                                     write(fd1, &(libri[i].disponibilita), sizeof(libri[i].disponibilita));
                                           
                                                                                                                        }
                                                                    }
                                            if(close(fd1)<0)
                                            printf("Errore chiusura fifo di risposta\n");
                                            remove(PID_FIFO);
                                                           
                                                                                           
                   
                                                     }
               
               }
va in loop una volta avviato!!!
Questo il client:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

typedef struct{
          char titolo[50];
          char autore[50];
          unsigned short disponibilita;       
          }Testo;
          
struct richiesta{
           char tit[50];
           char aut[50];
           pid_t pid;
           char msg[50];
           }msg;
           
           int main(void){
               pid_t pid;
               int fd,fd1,flag=1;
               FILE *fp;
               Testo libri[10];
               char opz,opz1,PID_FIFO[100];
               char buffer[50];
               unsigned short disponibilita,i=0;     
               time_t start;
               char titolo[50], autore[50];
                int nread;

               pid=getpid();
               
               while(1){
                        while(flag){
                                    printf("Digitare:\nR per ricercare un libro per titolo o autore\nU per uscire\nD per disconnettere\n");
                                    scanf("%c",&opz);
                                    opz=toupper(opz);
                                    if(opz=='R'||opz=='U'||opz=='D')
                                    flag=0;
                                    }
                        if(opz=='U'){
                                     exit(0);
                                     }
                        
                        else if(opz=='D'){
                             sprintf(msg.msg,"FINE");
                             fd=open("WK_FIFO",O_WRONLY);
                             write(fd,&msg,sizeof(msg));
                             close(fd);
                             exit(0);
                             }
                        flag=1;
                        fd=open("WK_FIFO",O_WRONLY);
                        
                        while(flag){
                                    printf("Ricerca Libro:\nDigitare T per ricerca Titolo\nDigitare A per ricerca Autore\n");
                                    scanf("%c",&opz1);
                                    opz1=toupper(opz1);
                                     if(opz1=='T'||opz1=='A')
                                    flag=0;
                                    }
                                    
                                    if(opz1=='T'){
                                                 printf("Digita il Titolo del libro da ricercare:\n");
                                                 scanf("%s",msg.tit);
                                                 msg.pid=pid;
                                                 write(fd,&msg,sizeof(msg));
                                                 if(close(fd)<0)
                                                 printf("Errore nella chiusura della WK_FIFO\n");
                                                 sprintf(PID_FIFO,"%d.FIFO",pid);
                                                 while((fd1=open(PID_FIFO,O_RDONLY))<0)
                                                 ;
                                                 nread = read(fd1, titolo, sizeof(titolo));
                                                         titolo[nread] = '\0';

                                                        nread = read(fd1, autore, sizeof(autore));
                                                        autore[nread] = '\0';

                                                  read(fd1, &disponibilita, sizeof(disponibilita));

                                                 if(close(fd1)<0)
                                                 printf("Errore chiusura FIFO_RISPOSTA\n");
                                                
                                                 printf("Il risultato della ricerca è:\n");
                                                 printf("Titolo: %s\nAutore: %s\nDisponibilità: %hu\n", titolo, autore, disponibilita);

                                                 
                                                 }
                                                  
                                                 else if(opz1=='A'){
                                                 printf("Digita l' Autore del libro da ricercare:\n");
                                                 scanf("%s",msg.aut);
                                                 msg.pid=pid;
                                                 write(fd,&msg,sizeof(msg));
                                                 if(close(fd)<0)
                                                 printf("Errore nella chiusura della WK_FIFO\n");
                                                 sprintf(PID_FIFO,"%d.FIFO",pid);
                                                 while((fd1=open(PID_FIFO,O_RDONLY))<0)
                                                 ;
                                                 nread = read(fd1, titolo, sizeof(titolo));
                                                         titolo[nread] = '\0';

                                                        nread = read(fd1, autore, sizeof(autore));
                                                        autore[nread] = '\0';

                                                  read(fd1, &disponibilita, sizeof(disponibilita));
                                                  
                                                 if(close(fd1)<0)
                                                 printf("Errore chiusura FIFO_RISPOSTA\n");
                                                
                                                  printf("Il risultato della ricerca è:\n");
                                                 printf("Titolo: %s\nAutore: %s\nDisponibilità: %hu\n", titolo, autore, disponibilita);
                                                 
                                                 }
                                    
                        }
               
               }
il client si blocca una volta richiesta una ricerca.
Il programma consiste nel gestire un file con dei libri(titolo,autore e disponibilita)-server-
il client interroga il server con ricerca titolo o autore,vengono proposti a video tutti quelli che soddisfano la richiesta.La comunicazione è tramite fifo.

Ringrazio chiunque voglia darmi una mano a risolvere!!!