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);
Foi útil?

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
scroll top