Linux x86_64Arquivos & E/S#72
fcntl
Executa operações de controle sobre um descritor de arquivo: duplicação, flags, locks, e mais.
Descrição
Assim como `ioctl` para dispositivos, `fcntl` é o ponto de entrada multiplexado para operações gerais sobre descritores de arquivo — obter/definir flags (O_NONBLOCK, FD_CLOEXEC), duplicar descritores, gerenciar locks de registro de arquivo (F_SETLK), e configurar leases e notificações.
Header:
fcntl.hman 2Assinatura
int fcntl(int fd, int cmd, ... arg);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | Descritor de arquivo. |
| cmd | int | Comando: F_DUPFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK, F_SETLK, etc. |
| arg | ... | Argumento opcional cujo tipo depende de `cmd` (inteiro ou ponteiro para struct). |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | fdint |
| rsi | argumento 2 | cmdint |
| rdx | argumento 3 | arg... |
Valor de retorno
Depende de `cmd`; em geral um valor não negativo em sucesso, -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EBADF(9)
- Descritor de arquivo inválido.
- EDEADLK(35)
- Deadlock de recurso evitado (também EDEADLOCK).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.