Linux x86_64IPC & sincronização#30
shmat
Mapeia (anexa) um segmento de memória compartilhada System V no espaço de endereçamento do processo.
Descrição
Depois de anexado, o segmento é acessado como memória comum, sem chamadas de sistema adicionais para ler/escrever.
Header:
sys/shm.hman 2Assinatura
void * shmat(int shmid, const void * shmaddr, int shmflg);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| shmid | int | Identificador retornado por shmget. |
| shmaddr | const void * | Endereço sugerido para o mapeamento, ou NULL para o kernel escolher. |
| shmflg | int | SHM_RDONLY para anexar somente leitura, entre outras flags. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | shmidint |
| rsi | argumento 2 | shmaddrconst void * |
| rdx | argumento 3 | shmflgint |
Valor de retorno
Endereço onde o segmento foi mapeado em sucesso; (void *) -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EIDRM(43)
- Identificador removido (IPC System V).
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.