IPC mensagem da fila. chamada de sistema msgrcv. Sistema V. como sair do ciclo
-
18-09-2019 - |
Pergunta
Eu tenho uma fila de mensagens a partir do qual eu estou recebendo mensagens em um loop. O problema é que eu não sei como sair do loop. msgrcv retornos tipo size_t para que ele continua indo. Qual o valor I deve comparar o valor de retorno para que eu possa sair do loop?
while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);
Solução
Porque seu último parâmetro não inclui IPC_NOWAIT
, blocos msgrcv
enquanto espera para futuras mensagens.
Se não houver nenhuma mensagem a ser lida imediatamente, msgrcv(..., ... | IPC_NOWAIT)
voltará (size_t)-1
e conjunto errno = ENOMSG
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow