Linux x86_64Arquivos & E/S#436
close_range
Fecha um intervalo contíguo de descritores de arquivo em uma única chamada.
Descrição
Antes dela, fechar 'todos os descritores exceto stdin/stdout/stderr' (comum ao implementar `posix_spawn`-like e sandboxes) exigia um loop chamando `close` para cada número de descritor possível. Muito mais eficiente e com suporte a CLOSE_RANGE_CLOEXEC para apenas marcar close-on-exec em vez de fechar de fato.
man 2Desde o kernel 5.9
Assinatura
int close_range(unsigned int first, unsigned int last, unsigned int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| first | unsigned int | Primeiro descritor do intervalo. |
| last | unsigned int | Último descritor do intervalo (inclusive). |
| flags | unsigned int | CLOSE_RANGE_UNSHARE, CLOSE_RANGE_CLOEXEC. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | firstunsigned int |
| rsi | argumento 2 | lastunsigned int |
| rdx | argumento 3 | flagsunsigned int |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.