2016-12-18 4 views
0

아버지와 아들 프로세스 사이에서 메시지 큐를 보내고 받기 위해 메시지 대기열을 사용하려고하는데 enum을 사용하여 msgrcv에 대한 메시지 유형을 설정했지만 그 정보를 무시하는 것으로 보입니다.메시지 큐가 enum 유형의 메시지를 읽지 않습니다

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

및 명령은 다음과 같습니다 내가 int로 열거 형에서 인수를 변경할 수 있지만 열거대로 작동하지 않는 이유를 궁금 경우

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

그것은 작동 다른 방법으로이 작동하게 만들다.

미리 감사드립니다.

답변

0

msgtyp는 보통의 int와는 반대로 long으로 처리되는 것처럼 보입니다. 열거 형은 그냥 일반적인 int로 취급됩니다.

ssize_t를 위해 msgrcv (INT msqid 인 무효 인 msgp *, Blank 영역이 size_t, msgtyp과, 의 msgflg에 INT);

그래서 나는 컴파일러가 긴 더 쉽게 수행 할 수 있습니다에 'INT'를 변환하는 경우, 긴에 '열거'변환 문제를 가지고있다 생각하고있다. msgtyp을 길게 캐스팅하려고하면 어떻게 될까요? 당신이 제공 한 위의 코드를 컴파일했을 때 어떤 캐스트도없이 작동했습니다.

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

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

는 열거 형을 설명 할 수있는 글입니다