Wysyłam przez kolejkę liczbę 100
, odbieram liczbę 0
. Co robię źle? Czego nie doczytałem w manualach? Kod:
mg@mg-K54C ~/wtf $ cat kol.h
#ifndef KOL_H
#define KOL_H
#include <sys/types.h>
#include <sys/ipc.h>
typedef struct
{
long nr;
struct d
{
long liczba;
} dane;
} msg_typKomunikatu;
#endif
mg@mg-K54C ~/wtf $ cat wysylacz.c
#include <sys/msg.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stddef.h>
#include "kol.h"
int main()
{
int kolID = msgget(ftok("./wysylacz", 1), IPC_CREAT);
if(!fork())
execlp("./odbieracz", "odbieracz", (char *)NULL);
msg_typKomunikatu d; d.nr = 15; d.dane.liczba = 100;
msgsnd(kolID, &d, sizeof(d.dane), 0);
wait(NULL);
msgctl(kolID, IPC_RMID, NULL);
}
mg@mg-K54C ~/wtf $ cat odbieracz.c
#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <stdio.h>
#include "kol.h"
int main()
{
int kolID = msgget(ftok("./wysylacz", 1), 0);
msg_typKomunikatu d;
msgrcv(kolID, &d, sizeof(d.dane), 0, 0);
printf("%lu\n", d.dane.liczba);
}
mg@mg-K54C ~/wtf $ gcc -o wysylacz -std=gnu11 wysylacz.c
mg@mg-K54C ~/wtf $ gcc -o odbieracz -std=gnu11 odbieracz.c
mg@mg-K54C ~/wtf $ ./wysylacz
0
mg@mg-K54C ~/wtf $