跨进程沟通'紧急'消息类型

时间:2015-03-12 15:24:32

标签: c linux message-queue inter-process-communicat

我一直在经历Beej's guides on inter process communication

' kirk.c'被修改为能够发送标记为URGENT的消息? 然后,#spock.c'将忽略这些紧急消息。而是由另一个程序读取?

1 个答案:

答案 0 :(得分:1)

在文件kirk.c中,我们可以引入一个枚举变量,它将定义要发送的消息类型。结构struct my_msgbuf具有成员变量long mtype;。可以在将消息类型发送到接收方之前将其初始化为消息类型,在本例中为spock.c

枚举声明:

enum msgType {
    URGENT = 0,
    NORMAL = 1
};

上述枚举声明可以放在kirk.cspock.c的公共头文件中。

buf.mtype = 1; /* we don't really care in this case */应修改为buf.mtype = URGENT; /* we don't really care in this case */

spock.c中,以下行:

for(;;) { /* Spock never quits! */
    if (msgrcv(msqid, &buf, sizeof(buf.mtext), 0, 0) == -1) {
        perror("msgrcv");
        exit(1);
    }
    printf("spock: \"%s\"\n", buf.mtext);
}

..将被修改为:

for(;;) { /* Spock never quits! */
    if (msgrcv(msqid, &buf, sizeof(buf.mtext), 0, 0) == -1) {
        perror("msgrcv");
        exit(1);
    }
    if (URGENT != buf.mtype) {
        printf("spock: \"%s\"\n", buf.mtext);
    }
}

因此,只有当消息类型不是URGENT时,spock才会“处理”(在这种情况下,它只是打印数据作为处理它的方式)。

相关问题