#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
struct msqid_ds *buf; //zmienna przez ktora przekazywane sa parametry operacji
struct msgbuf { //struktura komunikatu
long mtype; //typ komunikatu
char *mtext; //tresc komunikatu
};
struct msgbuf bufor1, bufor2;
int main()
{
int id_msgget; //identyfikator kolejki
char *wiadomosc = "message ..."; //tresc komunikat
int rozmiar = sizeof(struct msgbuf) - sizeof(bufor1.mtype); //rozmiar komunikatu
pid_t pid;
id_msgget = msgget(IPC_PRIVATE, IPC_CREAT|0600);
if ((pid = fork()) == 0) { //potomek
printf("Id msgget %d\n", id_msgget);
bufor1.mtype = 1; //typ komunikatu
bufor1.mtext = wiadomosc; //tresc komunikatu
int wysylanie = msgsnd (id_msgget, &bufor1, rozmiar, 0); //wyslanie komunikatu
if (wysylanie == -1)
perror("Blad wyslania");
exit(0);
}
else { //rodzic
wait(0);
msgrcv(id_msgget, &bufor2, rozmiar, 1, 0); //odebranie komunikatu
printf("Odebrany komunikat: %s\n", bufor2.mtext);
msgctl(id_msgget, IPC_RMID, buf); //usuniecie kolejki
return 0;
}
}