Linux x86_64Sistema & diversos#318
getrandom
Obtém bytes aleatórios de qualidade criptográfica do gerador do kernel.
Descrição
Forma moderna e recomendada de obter aleatoriedade segura, substituindo o padrão antigo de abrir e ler de `/dev/urandom` — evita o custo de abrir um descritor de arquivo e funciona corretamente mesmo em ambientes com sistema de arquivos restrito (ex.: chroot/sandbox sem /dev).
Header:
sys/random.hman 2Desde o kernel 3.17Nota
Sem GRND_RANDOM (comportamento padrão), bloqueia apenas até o gerador ser inicializado uma vez no boot — depois disso nunca mais bloqueia, diferente do antigo /dev/random.
Assinatura
ssize_t getrandom(void * buf, size_t buflen, unsigned int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| buf | void * | Buffer de destino para os bytes aleatórios. |
| buflen | size_t | Número de bytes desejado. |
| flags | unsigned int | GRND_RANDOM, GRND_NONBLOCK, GRND_INSECURE. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | bufvoid * |
| rsi | argumento 2 | buflensize_t |
| rdx | argumento 3 | flagsunsigned int |
Valor de retorno
Número de bytes efetivamente escritos em `buf` em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- ENOSYS(38)
- Chamada de sistema não implementada nesta versão do kernel.