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