قائمة انتظار رسالة IPC. مكالمة نظام MSGRCV. النظام V. كيفية الخروج من حلقة
-
18-09-2019 - |
سؤال
لدي قائمة انتظار الرسائل التي أحصل عليها الرسائل في حلقة. المشكلة هي أنني لا أعرف كيفية الخروج من الحلقة. يعود MSGRCV نوع Size_T، لذلك يستمر في الذهاب. ما القيمة التي يجب أن أقارن قيمة العودة حتى أتمكن من الخروج من الحلقة؟
while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);
المحلول
لأن المعلمة الأخيرة لا تشمل IPC_NOWAIT
, msgrcv
كتل أثناء انتظار الرسائل المستقبلية.
إذا لم يكن هناك رسالة ليتم قراءتها على الفور، msgrcv(..., ... | IPC_NOWAIT)
سيعود (size_t)-1
وحدد errno = ENOMSG
.
لا تنتمي إلى StackOverflow