Hallo,
2 Prozesse (einer Client, einer Server) sollen mittels SysV Message Queues miteinander kommunizieren.
Allerdings gibt mir printf() im Serverteil nach Erhalt der Message keinen Output.
Wisst ihr vielleicht woran es liegen könnte?
Vielen Dank
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <errno.h>
#define BUFLEN 256
struct msgbuffer
{
long mtype;
char mtext[BUFLEN];
};
int main()
{
pid_t pid;
key_t key;
int msq_id;
pid = fork();
if (pid == 0) // Kind; Client
{
key = ftok("servername", 1); // Key erzeugen
msq_id = msgget(key, 0666); // Msq ID
// Nachricht anlegen
struct msgbuffer msg;
msg.mtype = 1;
strcpy(&msg.mtext[0], "Das ist eine Nachricht!\n");
// Nachricht senden
if ((msgsnd(msq_id, &msg, BUFLEN, 0) == -1))
{
fprintf(stderr, "Fehler bei msgsnd(): %s\n", strerror(errno));
}
}
if (pid != 0) // Elternteil; Server
{
key = ftok("servername", 1); // Key erzeugen
msq_id = msgget(key, 0666 | IPC_CREAT); // Msq ID
// Nachrichtenbuffer erstellen
struct msgbuffer msg;
// Nachricht erhalten
// wird supendiert, solange Queue leer
if((msgrcv(msq_id, &msg, BUFLEN, 1, 0)) == -1)
{
fprintf(stderr, "Fehler bei msgrcv(): %s\n", strerror(errno));
}
// Nachricht ausgeben
printf("%s", msg.mtext);
}
exit(EXIT_SUCCESS);
}