Linux x86_64IPC & sincronização#69
msgsnd
Envia uma mensagem tipada para uma fila de mensagens System V.
Descrição
Cada mensagem carrega um `long mtype` que receptores podem usar para filtrar seletivamente quais mensagens ler com `msgrcv`.
Header:
sys/msg.hman 2Assinatura
int msgsnd(int msqid, const void * msgp, size_t msgsz, int msgflg);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| msqid | int | Identificador da fila. |
| msgp | const void * | Ponteiro para uma struct começando com `long mtype`, seguida dos dados da mensagem. |
| msgsz | size_t | Tamanho dos dados da mensagem (sem contar `mtype`). |
| msgflg | int | IPC_NOWAIT para não bloquear se a fila estiver cheia, 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 | msgpconst void * |
| rdx | argumento 3 | msgszsize_t |
| r10 | argumento 4 | msgflgint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EIDRM(43)
- Identificador removido (IPC System V).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.