消息队列C多个进程

时间:2017-11-22 20:44:33

标签: c process fork message-queue messages

我在分配子进程后遇到了消息问题。 基本上父亲需要创建一个消息队列和一个子进程,然后暂停,直到孩子发送消息并终止。之后,父亲阅读了这条消息。 IT在执行时给出了读写错误。 谢谢你的帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#include <errno.h>

typedef struct Mymsg {
    long mtype;/* Message type */
    char mtext[20]; /* Message body */
}Mymsg;


int main() {
    int mask, id;
    key_t key;
    mask = 0666;
     Mymsg message;
    Mymsg in;
    key = ftok("/tmp", 'x');
    if((id = msgget(key, IPC_CREAT)) == -1) {
        printf("msgget error");
        exit(EXIT_FAILURE);
    }
    switch(fork()) {
        case 0:
            printf("CHILD PROCESS\n");
            message.mtype=1;
            strcpy(message.mtext,"test");
            if(msgsnd(id,&message,sizeof(message.mtext),0)==-1)
                printf("ERROR SEND\n");

            _exit(EXIT_SUCCESS);
        default:
            wait(NULL);
            printf("FATHER PROCESS\n");
            if(msgrcv(id, &in, (sizeof(in)- sizeof(long)), 1,0)== -1)
                printf("ERROR RCV \n");
            printf("READ: %s\n", in.mtext);
            msgctl(id, IPC_RMID,0);
    }
    exit(EXIT_SUCCESS);

    }

0 个答案:

没有答案