Hallo Leute,
dies richtet sich an alle die Ahnung von C unter Unix/Linux haben.
Ich muss ein kleines Programm mit Message Queues schreiben (es MÜSSEN Message Queues sein).
Es sollen 2 Sohnprozesse gestartet werden, die mithilfe der Message Queues kommunizieren.
Sohn 1 sendet ein paar Integer Werte
Sohn 2 empfängt in einer Endlosschleife Werte verarbeitet sie und sendet ein paar Integer und float Werte zurück.
Sohn 1 empfängt die zurückgegebenen Werte, terminiert und der Vaterprozess killt schliesslich den Sohn 2.
Mein Problem ist, das ich die Kommunikation mit den Message Queues nicht hinbekomme
. Irgendwie bleibt das Programm einfach stehen. Manchmal startet der noch nicht einmal die Sohnprozesse.
Hier ist eine vereinfachung des Programms, wo quasi nur einmal mit einer Message Queue kommuniziert werden soll, aber selbst da hängt das Ding.
Vielleicht kann mir einer helfen????
#define _HPUX_SOURCE
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/signal.h>
main()
{
int i, status, server_id;
struct
{
long mtype;
int wert1, wert2, wert3;
}message_snd, message_rcv;
int msgid;
msgid = msgget(IPC_PRIVATE, IPC_CREAT|0777);
if(fork()==0)
{
printf("CLIENT\n");
sleep(1);
message_snd.mtype = 1;
message_snd.wert1 =10;
message_snd.wert2 = 11;
message_snd.wert3 = 12;
msgsnd(msgid, &message_snd, sizeof(message_snd)-sizeof(long),0);
sleep(5);exit(0);
}
if((server_id=fork())==0)
{
printf("SERVER\n");
sleep(2);
while(1)
{
msgrcv(msgid, &message_rcv, sizeof(message_rcv)-sizeof(long), 0, 0);
printf("Empfangen: %d %d %d\n", message_rcv.wert1, message_rcv.wert2, message_rcv.wert3);
}
}
wait(&status);
kill(server_id,SIGKILL);
msgctl(msgid, IPC_RMID, 0);
}
Danke schonmal.....
EDIT: habe noch ein paar Änderungen vorgenommen. Jetzt bleibt er nicht hängen, aber er sendet oder empfängt nicht.
bye
Spinal