Linux x86_64Usuários & permissões#268
fchmodat
Altera as permissões de um arquivo relativo a um descritor de diretório.
Descrição
Versão *at() de `chmod`, permitindo operação relativa segura.
man 2Desde o kernel 2.6.16
Diferença entre versões
Diferente da maioria das chamadas *at(), a `fchmodat` original nunca implementou de fato AT_SYMLINK_NOFOLLOW no kernel — por isso `fchmodat2` (syscall 452) foi adicionada para suprir essa lacuna.
Assinatura
int fchmodat(int dirfd, const char * pathname, mode_t mode, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| dirfd | int | Descritor do diretório base, ou AT_FDCWD. |
| pathname | const char * | Caminho, absoluto ou relativo a `dirfd`. |
| mode | mode_t | Novo modo de permissão. |
| flags | int | Na chamada original, praticamente sem efeito prático — ver fchmodat2 para AT_SYMLINK_NOFOLLOW real. |
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 | modemode_t |
| r10 | argumento 4 | 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).