gpt4 book ai didi

c - 消息队列不会读取枚举类型的消息

转载 作者:行者123 更新时间:2023-11-30 15:01:55 24 4
gpt4 key购买 nike

我正在尝试使用消息队列在父子进程之间发送和接收消息,我使用枚举来设置 msgrcv 的消息类型,但它似乎忽略了该信息:

enum children {
e_father_child1 = 1,
e_father_child2 = 2,
e_child1_father = 10,
e_child2_father = 20
};

命令是:

queue_indc = msgrcv (msgid, &msg, sizeof (msg.m_data), e_child1_father, 0);

如果我将参数从枚举类型更改为 int,它就可以工作,但我想知道为什么它不能作为枚举工作,是否有其他方法可以使其工作。

提前致谢!

最佳答案

似乎 msgtyp 被视为 long 而不仅仅是常规 int。枚举被视为普通整数。

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

所以我认为编译器在将“enum”转换为 long 时遇到了麻烦,而将“int”转换为 long 可以更容易地完成。如果您尝试将 msgtyp 转换为 long 会怎样?当我编译您提供的上述代码时,它可以在没有任何强制转换的情况下工作。

例如

queue_indc = msgrcv (msgid, &msg, sizeof (msg.m_data), (long) e_child1_father, 0);

这里有一篇文章可能有助于解释枚举类型:

http://www.embedded.com/electronics-blogs/programming-pointers/4026892/Enumerations-are-integers-except-when-they-re-not

关于c - 消息队列不会读取枚举类型的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41212590/

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