1

I got an assignment to create a message queue in Linux. I need to use msgnd() and msgrcv() functions. Everything works if my message structure has two fields mtype and mtext[] but I need to add one more field an int mpid. But when I read the value from mpid it is just garbage from the memory. I searched for answers or examples but I only found structures with two fields. Can I even add more?

struct myBuff{
    long mtype;
    char mtext[255];
    int mpid;
};

code for the sender

void add_message(int id, struct myBuff buff){
    int size = strlen(buff.mtext) + 1 + sizeof(int)
    if (size > 255 + sizeof(int))
        exit(EXIT_FAILURE);
    
    msgsnd(id, (struct msgbuf*)&buff, size, 0 | MSG_NOERROR);
}

code for the receiver

void check_message(int id, struct myBuff* buff)
{
    msgrcv(id, (struct msgbuf*)buff, 255 + sizeof(int), buff->mtype, 0 | MSG_NOERROR);
}
  • You should be using `sizeof(struct myBuff)` for the size arguments.You're reading and writing partial structs. – Shawn Dec 13 '20 at 01:50

0 Answers0