Linux x86_64IPC & sincronização#70
msgrcv
Recebe (e remove) uma mensagem de uma fila de mensagens System V.
Descrição
Pode filtrar por `msgtyp` para receber seletivamente mensagens de um tipo específico, em vez de sempre a mais antiga.
Header:
sys/msg.hman 2Assinatura
ssize_t msgrcv(int msqid, void * msgp, size_t msgsz, long msgtyp, int msgflg);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| msqid | int | Identificador da fila. |
| msgp | void * | Buffer que recebe a mensagem (mtype + dados). |
| msgsz | size_t | Capacidade máxima para os dados da mensagem. |
| msgtyp | long | Filtro por tipo de mensagem (0 = a mais antiga de qualquer tipo). |
| msgflg | int | IPC_NOWAIT, MSG_NOERROR, entre outras flags. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | msqidint |
| rsi | argumento 2 | msgpvoid * |
| rdx | argumento 3 | msgszsize_t |
| r10 | argumento 4 | msgtyplong |
| r8 | argumento 5 | msgflgint |
Valor de retorno
Número de bytes recebidos (dados, sem `mtype`) em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- E2BIG(7)
- Lista de argumentos grande demais.
- EACCES(13)
- Permissão negada.
- EIDRM(43)
- Identificador removido (IPC System V).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- ENOMSG(42)
- Nenhuma mensagem do tipo desejado.