Linux x86_64IPC & sincronização#243
mq_timedreceive
Recebe a mensagem de maior prioridade de uma fila POSIX, com timeout opcional.
Descrição
Contraparte de leitura de `mq_timedsend`.
Header:
mqueue.hman 2Desde o kernel 2.6.6Assinatura
ssize_t mq_timedreceive(
mqd_t mqdes,
char * msg_ptr,
size_t msg_len,
unsigned int * msg_prio,
const struct timespec * abs_timeout
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| mqdes | mqd_t | Descritor da fila. |
| msg_ptr | char * | Buffer que recebe a mensagem. |
| msg_len | size_t | Capacidade de `msg_ptr`; deve ser >= mq_msgsize da fila. |
| msg_prio | unsigned int * | Se não for NULL, recebe a prioridade da mensagem recebida. |
| abs_timeout | const struct timespec * | Instante absoluto limite; NULL bloqueia indefinidamente. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | mqdesmqd_t |
| rsi | argumento 2 | msg_ptrchar * |
| rdx | argumento 3 | msg_lensize_t |
| r10 | argumento 4 | msg_priounsigned int * |
| r8 | argumento 5 | abs_timeoutconst struct timespec * |
Valor de retorno
Número de bytes recebidos em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EINTR(4)
- Chamada interrompida por um sinal.
- EMSGSIZE(90)
- Mensagem grande demais para o socket.
- ETIMEDOUT(110)
- Conexão expirou (timeout).