Impossible de déterminer la raison de SIGPIPE

J’ai un serveur client où le client émet des opérations de fichier sur le serveur. Le programme s’exécute parfaitement lorsque la première commande de lecture / suppression est lancée. Mais quand je lance la deuxième commande read / delete, elle se termine avec le code de sortie 141. Je détermine la raison d’être SIGPIPE. Mais je n’arrive pas à le résoudre. Quelqu’un peut-il m’aider à ce sujet

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  //#include  #include "Functions.h" #define PIPE_BUF 50000 #define MAXMESGDATA (PIPE_BUF -2*sizeof(long)) #define MESGHDRSIZE (sizeof(Message_buf) -MAXMESGDATA) #define MAX_SIZE 512 pid_t serverPid; pid_t clientPid; void Server(int readfd,int writefd) { Message_buf server_MessageBuf; int operationStatus = 0; char inputFileName[MAXMESGDATA]; char operationToBePerformed[MAXMESGDATA]; char messageOnPIPE[MAXMESGDATA]; ssize_t length; if((length=mesg_recv(readfd,&server_MessageBuf))==0) { printf("\n End of file while reading pathname"); } strcpy(messageOnPIPE,server_MessageBuf.messageText); printf("\n Server side Message on PIPE:%s \n ",messageOnPIPE); operationStatus=interpretCommand(messageOnPIPE,operationToBePerformed,inputFileName); if(strcasecmp(operationToBePerformed,"read")==0) { readFile(writefd,inputFileName); //printf("\n Read %s ",inputFileName); } if(strcasecmp(operationToBePerformed,"delete")==0) { deleteFile(writefd,inputFileName); } } int main() { int pipe1[2],pipe2[2]; pipe(pipe1); pipe(pipe2); //signal(SIGPIPE, SIG_IGN); pid_t pid; pid=fork(); serverPid=pid; if(pid==0) { /*Call Server*/ close(pipe1[1]); close(pipe2[0]); Server(pipe1[0], pipe2[1]); } else { close(pipe1[0]); close(pipe2[1]); Client(pipe2[0],pipe1[1]); } return 0; } 

Votre serveur ne fonctionne pas en boucle. Il reçoit un message, puis ferme le canal. La deuxième écriture échoue et un SIGPIPE est envoyé au client.