Linux x86_64Arquivos & E/S#292
dup3
Como dup2, mas permite aplicar O_CLOEXEC atomicamente no novo descritor e proíbe oldfd == newfd.
Descrição
Evita a janela de corrida entre `dup2` e uma chamada `fcntl(F_SETFD, FD_CLOEXEC)` subsequente.
man 2Desde o kernel 2.6.27
Assinatura
int dup3(int oldfd, int newfd, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| oldfd | int | Descritor a duplicar. |
| newfd | int | Número de descritor de destino. |
| flags | int | O_CLOEXEC. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | oldfdint |
| rsi | argumento 2 | newfdint |
| rdx | argumento 3 | flagsint |
Valor de retorno
`newfd` em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EBUSY(16)
- Dispositivo ou recurso ocupado.
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.