Allora io ho scritto questo pezzo di codice ma non so se sia corretto o meno e in piu sono bloccato al punto in cui il server riceve il messaggio dal client
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <include.h>
#define Path_SIZE 128
char fifoServer[PATH_SIZE] = "/tmp/FifoServer";
char fifoServer[PATH_SIZE];
int main(int argc, char *argv[])
{
if (argc == 2)
{
fifoServer = argv[1];
}
int status;
int client_to_server;
int server_to_client;
int son_to_father[2];
int father_to_son[2];
char buf[BUFSIZE];
/*create the fifo */
mkfifo(fifoServer,0666);
while (1) {
msgrcv(msgid,&msg_read,sizeof(int),1,MSG_NOERROR); /*si mette in attesa finchè non riceve un messaggio di dimensione 1 */
msg_write.mytipe=msg_read.pid;
msgnd(msgid,&msg_write,size,0);/*se non ci sono messaggio si msgrcv si bloccherà fino a quando non si immetterà un messaggio nella coda di msgrcv */
}
pipe(father_to_son);/*creo la pipe da padre a figlio*/
pipe(son_to_father);/*creo la pipe da figlio a padre*/
if ((status=fork())==-1)
syserr(argv[0],"fork() fallita");
else
if(status==0){/*figlio*/
close(father_to_son[1])/*chiudo fase scrittura della pipe da padre a figlio */
close(son_to_father[0]);/*chiudo fase scrittura della pipe da figlio a padre*/
write(son_to_father[1];/*messaggio di risposta*/;BUFSIZE)/*inserisco nella pipe di risposta del figlio il risultato dell'azione che mi era stat imposta di fare dal client*/
if(read(father_to_son[0],buf,BUFSIZE)==-1)/*controllo che il read della pipe da padre a figlio sia andato a buon fine */
syserr(argv[0],"read() fallito");
printf ("Figlio ha ricevuto : %s \n",buf);
exit(0);
}else {/*padre*/
close(father_to_son[0]);/*chiudo fase lettura della pipe da padre a figlio*/
close(son_to_father[1];/*chiudo fase scrittura della pipe da figlio a padre*/
write(father_to_son[1];/*messaggio del client*/,BUFSIZE);/*inserisco nella pipe che passo al figlio il messaggio del client*/
if(read(son_to_father[0],buf,BUFSIZE)==-1)/*controllo che il read della pipe da figlio a padre sia andato a buon fine */
syserr(argv[0],"read() fallito");
printf("Padre ha ricevuto : %s \n",buf)
wait(%status);
exit(0);
}