قائمة انتظار رسالة IPC. مكالمة نظام MSGRCV. النظام V. كيفية الخروج من حلقة

StackOverflow https://stackoverflow.com/questions/1682676

سؤال

لدي قائمة انتظار الرسائل التي أحصل عليها الرسائل في حلقة. المشكلة هي أنني لا أعرف كيفية الخروج من الحلقة. يعود 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top