进程间通信“紧急”消息类型
Posted
技术标签:
【中文标题】进程间通信“紧急”消息类型【英文标题】:Inter Process Communication 'URGENT' message types 【发布时间】:2015-03-12 15:24:32 【问题描述】:我一直在经历Beej's guides on inter process communication。
如何修改“kirk.c”以发送标记为“紧急”的消息? 然后这些紧急消息会被“spock.c”忽略,而被另一个程序读取?
【问题讨论】:
当链接内容不可用时,依赖链接内容的问题很容易变得无用。考虑创建一个最小、完整和可验证的示例:***.com/help/mcve 【参考方案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 才会“处理”(在这种情况下,它只是打印数据作为处理它的一种方式)消息。
【讨论】:
安息吧,斯波克 27/2/2015 将buf.mtype
声明为您选择大小的字符数组,但至少具有实现所需的最少字符数。将URGENT != buf.mtype
替换为strncmp
以上是关于进程间通信“紧急”消息类型的主要内容,如果未能解决你的问题,请参考以下文章