Hi all
Írni akarok egy felelgető program párt, amelyben mindkét program két szálból áll, egy íróból és egy olvasóból. Mind a két esetben az író szál feladata, hogy a stdin-ről érkező üzeneteket továbbítsa a másik program olvasó száljához. Az olvasó szál feladat, hogy a másik programtól érkező üzenetet a képernyőre írja.
Az író olvasó forráskódot már összeszedtem csak egybe kéne őket olvasztani valamivel, hogy több szálon fusson.
/* Filenev: msgkuldes.c
Keszit egy uzenetsort a KEY kulccsal,ha az meg nem letezik.
A szabvanyos bemenetrol beolvasott sort az uzenetsorba teszi
1-es tipusu uzenetküld.
*/
#include
#include
#include
#include
#define KEY 1
#define PERM 0666
struct {
long mtype; // Az üzenet típusa
char mtext[80]; // Az üzenet teste
} uzenet; // Az üzenet struktra
int main(void)
{
int id; // üzenetsor azonosítója
int msgsize; // Az zenet mérete
// Létrehozzuk a sort vagy beazanosítjuk
if( (id = msgget(KEY, PERM | IPC_CREAT)) < 0)
{
perror(" Nem hozható létre az üzenetsor. \n");
exit(-1);
}
puts(" Kérek egy sort >");
gets(uzenet.mtext); // Bemenetrőé egy sort olvasunk be
uzenet.mtype = 1; // Legyen ez a típus
msgsize = strlen(uzenet.mtext) + 1; // Az üzenet méret
// Elkuldjuk az zenetet
msgsnd(id, (struct msgbuf *) &uzenet, msgsize, PERM);
}
/* fájl nev: msgletrehozas.c
Keszit 1 uzenetsort a KEY kulccsal,ha az meg nem letezik.
Megnezi, ures-e az uzenetsor. Kiirja az uzeneteket, ha nem ures.
*/
#include
#include
#include
#include
#define KEY 1
#define PERM 0666
struct {
long mtype; // Az üzenet típusa
char mtext[80]; // Az üzenet teste
} uzenet; // üzenet struktúra változó
int main()
{
int id; // Uzenetsor belso leiroja
struct msqid_ds buff, *buffp = &buff; // Attributumok puffere
int msgsize = 32; // Csonkolasi meret
int select = 0; // Uzenet tipus valaszto
// Letrehozzuk a sort vagy beazanositjuk
if( (id = msgget(KEY, PERM | IPC_CREAT)) < 0)
{
perror(" Nem hozhato letre az uzenetsor. \n");
exit(-1);
}
// lekerdezzuk az uzenetek pillanatnyi szamat
msgctl(id, IPC_STAT, buffp);
// A buff.msg_qnum valtozaban az uzenetek pillanatnyi szama ...
while(buff.msg_qnum)
{
msgrcv(id, (struct msgbuf *) &uzenet, msgsize, select, IPC_NOWAIT);
puts(uzenet.mtext);
msgctl(id, IPC_STAT, buffp);
}
}