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

时间:2016-12-18 20:32:27

标签: c enums queue message msgrcv

我尝试使用消息队列在父进程和子进程之间发送和接收消息,我使用枚举为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,但是我想知道为什么它不能作为枚举工作,并且还有其他方法可以使它工作。

提前致谢!

1 个答案:

答案 0 :(得分:1)

似乎msgtyp被视为一个长期而不仅仅是一个普通的int。并且枚举被视为常规的整数。

  

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

所以我认为编译器在转换' enum'很长一段时间,转换一个' int'长期可以更轻松地完成。如果您尝试将msgtyp转换为long,该怎么办?当我编译你提供的上述代码时,它没有任何演员。

e.g。

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