Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.1 kB
5
Indexable
Never
#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;
	}
}