Очередь сообщений IPC. системный вызов msgrcv. Система V. Как выйти из цикла

У меня есть очередь сообщений, из которой я получаю сообщения в цикле. Проблема в том, что я не знаю, как выйти из цикла. 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);

1 ответ

Решение

Потому что ваш последний параметр не включает IPC_NOWAIT, msgrcv блокирует в ожидании будущих сообщений.

Если нет сообщения для немедленного прочтения, msgrcv(..., ... | IPC_NOWAIT) вернусь (size_t)-1 и установить errno = ENOMSG,

Другие вопросы по тегам