#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

struct missatge {
	long tipus;
	char dades[1024];
};

void fill (int ident);

int main () {
	pid_t pid;
	struct missatge m;
	int a=0;
	int ident;
	m.tipus=1;
	strcpy(m.dades,"hola bon dia");
	
	ident=msgget((key_t) 12, IPC_CREAT|0600);
	
	pid=fork();

	if (pid>0) {
		/*Sóc el pare*/
		msgsnd(ident, &m, sizeof(m), 0);
		wait(&a);
		/*esperem el fill i així segur que tindrem missatges*/
		msgrcv(ident,&m,sizeof(m),1,0);
		printf("Pare. Missatge rebut: %s\n",m.dades);
	}
	else {
		/*Sóc el fill*/
		printf("hola\n");
		fill(ident);
	}
	msgctl(ident,IPC_RMID,0);
	return (0);
}

void fill (int ident) {
	struct missatge m;
	printf("Estic al fill\n");
	sleep(1);
	printf("Després sleep\n");
	printf("ident: %d\n",ident);
	msgrcv(ident, &m, sizeof(m), 1, 0);

	printf("Sóc el fill. He rebut un missatge: %s\n",m.dades);
	strcpy(m.dades, "missatge rebut!!!");
	msgsnd(ident,&m,sizeof(m),0);
	exit(0);
}
