Очередь сообщений 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