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.