Linux x86_64IPC & sincronização#240
mq_open
Cria ou abre uma fila de mensagens POSIX, identificada por um nome ao estilo de caminho de arquivo.
Descrição
Alternativa moderna à API de mensagens System V (`msgget`/`msgsnd`/`msgrcv`), com nomes hierárquicos, suporte a notificação assíncrona (via `mq_notify`) e integração com `poll`/`select`.
Header:
mqueue.hman 2Desde o kernel 2.6.6Assinatura
mqd_t mq_open(
const char * name,
int oflag,
mode_t mode,
struct mq_attr * attr
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| name | const char * | Nome da fila, no formato "/nome". |
| oflag | int | O_RDONLY, O_WRONLY, O_RDWR, opcionalmente com O_CREAT, O_EXCL, O_NONBLOCK. |
| mode | mode_t | Permissões ao criar a fila (usado apenas com O_CREAT). |
| attr | struct mq_attr * | Atributos iniciais (tamanho máximo da fila, tamanho máximo de mensagem) ao criar. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | nameconst char * |
| rsi | argumento 2 | oflagint |
| rdx | argumento 3 | modemode_t |
| r10 | argumento 4 | attrstruct mq_attr * |
Valor de retorno
Um descritor de fila de mensagens em sucesso; (mqd_t) -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EEXIST(17)
- Arquivo já existe.
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENOENT(2)
- Arquivo ou diretório inexistente.
- ENOSPC(28)
- Sem espaço livre no dispositivo.