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