Linux x86_64IPC & sincronização#66
semctl
Executa operações de controle sobre um conjunto de semáforos System V (consulta, ajuste de valor, remoção).
Descrição
Inclui GETVAL/SETVAL (ler/definir o valor de um semáforo), IPC_STAT/IPC_SET e IPC_RMID.
Header:
sys/sem.hman 2Assinatura
int semctl(int semid, int semnum, int cmd, union semun ...);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| semid | int | Identificador do conjunto de semáforos. |
| semnum | int | Índice do semáforo dentro do conjunto, quando aplicável ao comando. |
| cmd | int | GETVAL, SETVAL, IPC_STAT, IPC_SET, IPC_RMID, entre outros. |
| ... | union semun | Argumento opcional, cujo tipo depende de `cmd`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | semidint |
| rsi | argumento 2 | semnumint |
| rdx | argumento 3 | cmdint |
| r10 | argumento 4 | ...union semun |
Valor de retorno
Depende de `cmd`; -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.
- EPERM(1)
- Operação não permitida (falta de privilégio).
- ERANGE(34)
- Resultado fora de faixa representável.