gpt4 book ai didi

c - 进程间通信 'URGENT' 消息类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:19 26 4
gpt4 key购买 nike

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

如何修改“kirk.c”才能发送标记为“紧急”的消息?这些紧急消息随后会被“spock.c”忽略,而是被另一个程序读取?

最佳答案

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

枚举声明:

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

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

buf.mtype = 1;/* 在这种情况下我们并不关心 */ 应该修改为 buf.mtype = URGENT;/* 在这种情况下我们并不关心 */

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 才会“处理”(在这种情况下,它只是打印数据作为处理它的一种方式)消息。

关于c - 进程间通信 'URGENT' 消息类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29013767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com