Очередь сообщений не будет читать сообщения перечислимого типа
Я пытаюсь использовать очередь сообщений для отправки и получения сообщений между процессами отца и сына. Я использовал enum для установки типов сообщений для 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);
Это работает, если я изменяю аргумент с типа enum на int, но мне было интересно, почему он не работает как enum и есть ли другой способ заставить его работать.
Заранее спасибо!
1 ответ
Кажется, что 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);
Вот статья, которая может помочь объяснить тип перечисления: