Linux x86_64Usuários & permissões#260
fchownat
Altera dono e/ou grupo de um arquivo relativo a um descritor de diretório.
Descrição
Parte da família *at(): permite operar de forma segura em caminhos relativos a um diretório específico (evitando TOCTOU) e, com AT_SYMLINK_NOFOLLOW, não seguir links simbólicos.
man 2Desde o kernel 2.6.16
Assinatura
int fchownat(
int dirfd,
const char * pathname,
uid_t owner,
gid_t group,
int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| dirfd | int | Descritor do diretório base, ou AT_FDCWD para usar o diretório de trabalho atual. |
| pathname | const char * | Caminho, absoluto ou relativo a `dirfd`. |
| owner | uid_t | Novo UID dono, ou -1 para não alterar. |
| group | gid_t | Novo GID grupo, ou -1 para não alterar. |
| flags | int | AT_SYMLINK_NOFOLLOW e/ou AT_EMPTY_PATH. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | dirfdint |
| rsi | argumento 2 | pathnameconst char * |
| rdx | argumento 3 | owneruid_t |
| r10 | argumento 4 | groupgid_t |
| r8 | argumento 5 | flagsint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EBADF(9)
- Descritor de arquivo inválido.
- ENOENT(2)
- Arquivo ou diretório inexistente.
- ENOTDIR(20)
- Não é um diretório.
- EPERM(1)
- Operação não permitida (falta de privilégio).