我一直在经历Beej's guides on inter process communication。
' kirk.c'被修改为能够发送标记为URGENT的消息? 然后,#spock.c'将忽略这些紧急消息。而是由另一个程序读取?
答案 0 :(得分:1)
在文件kirk.c
中,我们可以引入一个枚举变量,它将定义要发送的消息类型。结构struct my_msgbuf
具有成员变量long mtype;
。可以在将消息类型发送到接收方之前将其初始化为消息类型,在本例中为spock.c
。
枚举声明:
enum msgType {
URGENT = 0,
NORMAL = 1
};
上述枚举声明可以放在kirk.c
和spock.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才会“处理”(在这种情况下,它只是打印数据作为处理它的方式)。