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);
			}